Nic*_*ick 6 c c++ linker gcc clang
我有一个 C 程序,需要与 C++ 库 ( ROS )进行交互。通常,通过使用extern "C"和使用 C++ 编译器进行链接的包装器将 C 代码与 C++ 代码连接起来并不太困难,但我从来没有main在 C 部分的地方这样做过。
在C ++ FAQ表示这是一件坏事:
以下是一些要点(尽管某些编译器供应商可能不需要所有这些;请查看您的编译器供应商的文档):
- 编译时必须使用 C++ 编译器
main()(例如,用于静态初始化)
曾经,大多数 C++ 编译器要求该函数
main由 C++ 编译器编译。这种要求在今天并不常见,......
为什么main在 C 部分或 C++ 部分很重要?如果我今天尝试使用常见的链接器(主要是 GCC 和 Clang 的)将代码链接到 C 部分中的代码,我会遇到多少麻烦?
解决此问题的一种简单方法是重命名 C main() 并从新的 C++ main() 中调用它
如:
// in ypur current C main module
int my_c_main(int argc, char* argv[]) /* renamed, was main() */
{
/* ... */
]
// in a c++ module...
int main(int argc, char* argv[])
{
extern "C" int my_c_main(int argc, char* argv[]);
// if your c main() requires environment variables passed in envp,
// You can allocate space for strings and an array here and pass
// the environment variables you'll need, as the third parameter
// to my_c_main(), or pass environ, if your system has
// it defined in unistd.h
return my_c_main(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)