2

我有一个简单的、有代表性的 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 以使用文件扩展名来确定使用哪个编译器,因为 gcc 在我的系统上似乎默认为 C++?仅通过文件扩展名指定语言似乎是不够的。如果我使用-x标志指定语言,gcc 会按预期运行。

gcc -x c hello.c
4

1 回答 1

1

通常,您让自己make决定。

GNU Make 内置了隐式规则,可以自动选择正确的编译器。

尝试包含以下内容的 Makefile:

all: some_file.o some_other_file.o

然后在同一个目录下放置一个some_file.cppand 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
于 2013-02-11T18:29:16.923 回答