我受Gentoo bug #580414的困扰。 简而言之,默认选项会将 configure 误导为不检测标准包含文件,因为某些标头包含以下代码:
#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0
# if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0
# warning _FORTIFY_SOURCE requires compiling with optimization (-O)
, __ OPTIMIZE __ 默认情况下处于关闭状态,默认情况下 _FORTIFY_SOURCE 处于启用状态,生成的警告会被视为错误,表示“stdint.h”,“ stdlib.h“和许多其他人缺席。编译最终失败,我无法安装程序甚至升级gcc本身。
我可以简单地在环境变量或/ etc目录中放置一些内容来打开-O或关闭_FORTIFY_SOURCE以获取每次 gcc调用而不编辑gentoo构建脚本吗?
EPATCH_USER_EXCLUDE='*10_all_default-fortify-source*'
CFLAGS="-O2 -O -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
CFLAGS_FOR_BUILD="-O2 -O -U_FORTIFY_SOURCE"
没有任何改进。
答案 0 :(得分:1)
没有这样的环境变量。 CFLAGS
中的make.conf
将无效,因为构建系统通常会执行以下操作:
$(CC) $(CFLAGS) $(MY_HARDCODED_CFLAGS)
因此覆盖你的旗帜。
但是为了破坏传递给gcc的任何参数,你可以使用以下解决方法。
/usr/local/bin/
gcc
或"/usr/bin/" + basename(argv[0])
(提防无限递归)gcc
,cc
,x86_64-pc-linux-gnu-gcc
将一堆这样的行放入/etc/portage/bashrc
:
the_dir="/usr/local/bin/THE_DIR"
if [[ "${PATH}" != *"${the_dir}"* ]] ; then
export PATH="${the_dir}:${PATH}"
fi
为了避免将来遇到可能出现的问题,请不要忘记在某个地方记下这个变化。 (无论如何,应该采用任何解决方法。)
答案 1 :(得分:0)
记录我实际用于解决问题的命令。
mv /usr/bin/i686-pc-linux-gnu-gcc /usr/bin/i686-pc-linux-gnu-gcc.OLD
cat >/usr/bin/i686-pc-linux-gnu-gcc
/usr/bin/i686-pc-linux-gnu-gcc.OLD -O "$@"
CTRL + d
chmod +x /usr/bin/i686-pc-linux-gnu-gcc
cp /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnu-gcc /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnuu-gcc
mv /usr/bin/i686-pc-linux-gnu-g++ /usr/bin/i686-pc-linux-gnuu-g++
cat >/usr/bin/i686-pc-linux-gnu-g++
/usr/bin/i686-pc-linux-gnuu-g++ -O "$@"
CTRL + d
chmod +x /usr/bin/i686-pc-linux-gnu-g++
cp /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnu-g++ /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnuu-g++
cp /etc/env.d/gcc/i686-pc-linux-gnu-4.6.3.O /etc/env.d/gcc/i686-pc-linux-gnuu-4.6.3
所有信用都归rindeal。回顾一下: