我有一个简单的代表性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.cppsome_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/

10-11 21:53
查看更多