我在g ++下编译了c和c ++文件。如下所述: What is the difference between g++ and gcc?
使用g ++命令行将c文件编译为c ++。不是很大的问题,但迁移到gcc将允许编译为c文件和c ++文件编译为c ++。
我需要将哪些-I includes或-L库添加到gcc命令行,默认情况下g ++命令行是否包括在内?
答案 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
。严格来说,您应该能够使用标准库中的算法(new
,std::min
等)粘合剂和其他一些内容而不使用std::find_first_of
,但在大多数情况下,您可以使用包括它(链接器将忽略您实际未链接到的任何库)。
答案 3 :(得分:0)
为什么不用gcc和c ++用g ++编译c对象,然后在链接时使用g ++进行链接?