繁体   English   中英

如何设置gcc以使用文件扩展名(.c或.cpp)来确定正确的编译器/链接器?

[英]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.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM