[英]How do I set gcc to use the file extension (.c or .cpp) to determine the correct compiler/linker?
我有一个简单的,有代表性的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 ++程序时,会出现此错误。 在一个答案中 ,有人提到扩展确实很重要,并且gcc在编译C文件时需要.c
扩展,而在编译C ++文件时需要其他扩展(例如.cpp
)。
问题:由于在我的系统上gcc似乎默认为C ++,因此如何设置gcc以使用文件扩展名来确定要使用的编译器? 仅通过文件扩展名指定语言似乎还不够。 如果我使用-x
标志指定语言,则gcc将按预期运行。
gcc -x c hello.c
通常,让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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.