我有一个简单,有代表性的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 ++的上下文中有been discussed,当链接阶段,当gcc尝试将C库链接到C ++程序时,会出现此问题,从而产生错误。在one of the answers中,有人提到扩展确实很重要,并且gcc在编译C文件时需要.c
扩展名,以及其他一些扩展名(例如.cpp
)编译C ++文件时。
问题:如何设置gcc以使用文件扩展名来确定要使用哪个编译器,因为gcc似乎默认为我的系统上的C ++?仅通过文件扩展名指定语言似乎不够。如果我使用-x
标志指定语言,gcc将按预期运行。
gcc -x c hello.c
答案 0 :(得分:1)
通常,您让make
决定这一点。
GNU Make内置了隐式规则,可自动选择合适的编译器。
尝试使用以下内容的Makefile:
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