将g ++迁移到gcc

时间:2009-08-24 00:24:18

标签: gcc g++

我在g ++下编译了c和c ++文件。如下所述: What is the difference between g++ and gcc?

使用g ++命令行将c文件编译为c ++。不是很大的问题,但迁移到gcc将允许编译为c文件和c ++文件编译为c ++。

我需要将哪些-I includes或-L库添加到gcc命令行,默认情况下g ++命令行是否包括在内?

4 个答案:

答案 0 :(得分:4)

除了已有的内容之外,您不需要添加任何包含或库。

从C ++代码中调用C函数有什么用 - 你需要告诉C ++编译器这些是C函数,这样程序才能正确链接并且有效。

标准做法是将以下指令添加到C ++文件中包含的所有C头:

#ifdef __cplusplus
extern "C" {
#endif

... C header contents go here ...

#ifdef __cplusplus
}
#endif

此处有更多信息:http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

答案 1 :(得分:1)

不应该需要添加任何内容。如果它使用C ++,它应该自动引入C ++库。

如果没有,你会想要-lstdc ++(如果你仍然得到未定义的引用,则为libc的-lc)。如果使用数学函数,请不要忘记-lm。

答案 2 :(得分:1)

GCC可以根据文件扩展名确定文件所在的语言。但是,GCC不会自动链接运行时支持除C以外的任何语言。实际上,这意味着您可以使用gcc而不是g++编译C ++程序,但是您需要添加{{} 1}}指令:

-lstdc++

#include <iostream> int main() { std::cout << "Hello world\n"; }

g++ hello.cc

更准确地说,如果您使用标准库,例外,运算符gcc hello.cc -lstdc++或RTTI,则需要指定-lstdc++。例如,尝试在没有new的情况下编译以下内容:

-lstdc++

请注意,STL容器(包括int main() { try { throw 1; } catch (int i) { return i; } } s)默认使用运算符std::string。严格来说,您应该能够使用标准库中的算法(newstd::min等)粘合剂和其他一些内容而不使用std::find_first_of,但在大多数情况下,您可以使用包括它(链接器将忽略您实际未链接到的任何库)。

答案 3 :(得分:0)

为什么不用gcc和c ++用g ++编译c对象,然后在链接时使用g ++进行链接?