更改构建 C 编译器
我正在尝试在一台运行AIX 6.5的机器上从源代码构建Python 2.6.8,但有几个模块无法成功构建。在构建过程中,出现了一个XLC的手册页面,让我卡住了。我必须按q
键才能结束这个手册页面,之后过程才会继续。所以我在想,这是否是因为构建过程中调用了默认的XLC编译器,而我想把默认编译器改成g++:
make clean
CC=/bin/gcc CXX=/bin/g++ ./configure
make
但似乎没有效果,XLC的手册页面还是会弹出来,模块也无法构建。
我该如何确保使用g++而不是XLC呢?谢谢。
更新
这是在执行CC=/bin/gcc CXX=/bin/g++ ./configure
之后的日志:
-bash-3.2$ CC=/bin/gcc CXX=/bin/g++ ./configure
checking for --enable-universalsdk... no
checking for --with-universal-archs... 32-bit
checking MACHDEP... aix6
checking EXTRAPLATDIR...
checking machine type as reported by uname -m... 00F63F144C00
checking for --without-gcc...
checking for gcc... cc_r
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... no
checking whether cc_r accepts -g... yes
checking for cc_r option to accept ISO C89... -qlanglvl=extc89
checking for --with-cxx-main=<compiler>... no
checking how to run the C preprocessor... cc_r -qlanglvl=extc89 -E
checking for grep that handles long lines and -e... /opt/freeware/bin/grep
checking for egrep... /opt/freeware/bin/grep -E
在日志中,我看到有一行checking whether we are using the GNU C compiler... no
,这是否意味着它没有使用gcc?
还有在make的日志中:
checking for __attribute__((visibility("hidden")))... no
cc_r: 1501-210 (W) command option t contains an incorrect subargument
在上面的日志之后,xlc的手册页面又弹出来了。
1 个回答
cc_r编译器是IBM的编译器。IBM的C编译器(还有C++编译器)有好几种调用方式。比如,xlc就是一种,还有_r变体(这意味着它们链接到可重入/线程安全的库)也是一种。还有cc和c99等其他方式。你可能会问,为什么有这么多?其实每种都是为了简化常用选项,特别是针对不同的语言标准。比如,c99就是支持C99标准的。所以,编译器名字里没有'xl'前缀,并不代表它就不是IBM的编译器。
需要注意的是,你看到的手册页面是因为你在某个地方调用编译器时没有提供任何参数,或者提供了错误的参数。这就是出现这个信息的原因。
cc_r: 1501-210 (W) command option t contains an incorrect subargument
-t标志允许你替换编译器的某些部分,但实际上你很少会需要这样做。它需要一个子参数,例如:
cc_r -tI ...
这表示你要替换IPA优化器的编译时阶段(通常需要用-B指定新组件的位置)。
在你的makefile的某个地方,你指定了-t,这让可怜的编译器感到困惑。
顺便说一下,如果你想在make中覆盖编译器,可以在makefile中直接通过CC、CXX和CCC变量来指定。你可以先在命令行中试验一下,然后再编辑你的makefile。需要注意的是,如果你再次运行./configure,这些更改会丢失。
make CC=/bin/gcc CCC=/bin/g++ CXX=/bin/g++