更改构建 c 编译器

Posted

技术标签:

【中文标题】更改构建 c 编译器【英文标题】:Change build c compiler 【发布时间】:2013-03-07 02:05:09 【问题描述】:

我正在尝试在 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 的手册页。

【问题讨论】:

看日志,确定还在用xlc?通常,CC 应为 gccCXX 应为 g++。您的机器是否真的在/bin 中安装了g++ @n.m.谢谢。我不确定 xlc 是否在使用中。是的,它有 g++。在日志中我看到像for gcc... cc_rwhether the C compiler works... yeswhether we are using the GNU C compiler... no 这样的行,这是否意味着它不会使用 gcc? 脚本认为gcc 被称为cc_r。也许没有找到真正的 gcc。使用./configure CC=gcc,看here。 @n.m.我使用./configure CC=gcc,一切都完全一样。有什么想法吗? 你真的真的在/bin中安装了gcc吗?不是/usr/bin,不是/usr/local/bin?如果是这样,除了打开configure 脚本并开始逐行调试之外,几乎没有什么可以做的。 【参考方案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 flag 允许您交换编译器的某些部分,而您实际上很少想要这样做。它需要一个子参数,例如

cc_r -tI ...

表示您将换出 IPA 优化器的编译时阶段(通常使用 -B 指定新组件的位置)。

您在 makefile 中的某个地方指定了 -t 并极大地混淆了可怜的编译器。

顺便说一句,如果你想在make中覆盖编译器,你可以直接在makefile中通过CC、CXX和CCC变量指定。您可以在编辑 makefile 之前在命令行上指定它来进行试验。请注意,如果您再次运行 ./configure,这些更改将会丢失。

make CC=/bin/gcc CCC=/bin/g++ CXX=/bin/g++

【讨论】:

以上是关于更改构建 c 编译器的主要内容,如果未能解决你的问题,请参考以下文章

QT make 在构建时有很大的输出

C# VS2008 编译器选择错误的方法

碳化物c ++ symbian编译器错误

是否可以将 VS2008 配置为使用较旧的 VC++ 编译器进行构建?

开发环境Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )

开发环境Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )