我有一个简单的代表性C程序,存储在一个名为hello.c
的文件中:
#include <stdio.h>
int main(void)
{
printf('Hello, world\n');
return 0;
}
在我的Linux机器上,我试图用gcc编译程序:
gcc hello.c
返回错误:
undefined reference to "___gxx_personality_v0" ... etc
正如前面提到的,在C++的上下文中,这个问题出现在链接阶段,当GCC试图将C库链接到C++程序时,就产生了错误。在been中,有人提到扩展是很重要的,GCC在编译C文件时需要
.c
扩展,而编译C++文件时需要一些其他扩展(例如.cpp
)。问:我如何设置GCC使用文件扩展名来确定要使用哪个编译器,因为GCC似乎在我的系统上默认为C++?仅仅通过文件扩展名指定语言似乎还不够如果我使用
-x
标志指定语言,gcc将按预期运行。gcc -x c hello.c
最佳答案
通常,您让make
来决定这一点。
GNU Make内置了隐式规则,可以自动选择正确的编译器。
尝试使用包含以下内容的生成文件:
all: some_file.o some_other_file.o
然后将
some_file.cpp
和some_other_file.c
放在同一目录中,gnu make将自动选择正确的编译器链接器,你可能还需要自己提供当混合C和C++时,通常最容易与G++连接,如下所示:program.exe: some_file.o some_other_file.o
g++ -o $@ @^
这与:
program.exe: some_file.o some_other_file.o
g++ -o program.exe some_file.o some_other_file.o
关于c - 如何设置gcc以使用文件扩展名(.c或.cpp)来确定正确的编译器/链接器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14818466/