在 GCC 中将C++链接到 C

Linking C++ to C in GCC

本文关键字:链接 C++ GCC 中将      更新时间:2023-10-16

我有一个函数extern "C" int ping(void)在一个C++的"静态库"项目中。现在,我想编写一个简单的Hello-World C程序,它将调用此函数int x = ping();

我使用g++ / gcc但无法将C可执行文件与共享库链接C++但我无法使用。拜托,怎么能做到这一点?你能提供确切的gcc命令吗?

编辑

g++ -c -static liba.cpp
ar rcs liba.a liba.o
gcc -o x main.o -L. -la

并获得:

./liba.a(liba.o):(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

收集2:LD 返回 1 个退出状态

你可能必须使用 g++ 作为链接器,而不是 gcc。 如果 ping() 函数使用任何 STL 或异常、new 等,则它可能链接到 libstdc++,当您使用 g++ 作为链接器时,会自动链接。

我在编译混合 C/C++ 代码和 GCC 方面取得了很好的结果,但你们都需要"extern C"(显式将函数声明为 C 函数(并使用 -lstdc++ 链接到C++库。

另请参阅:

在C++来源中,外部"C"的效果是什么?

g

++和gcc有什么区别?

查找名称重整。 如果C++库不导出"extern C"名称,则它会以三种不同的方式之一变得有趣,具体取决于用于构建库的编译器。

即便如此,你也不会得到令人满意的结果,因为很多C++概念都不会被一个从C侧开始的程序正确处理。 你不会认为一个C程序在不理解这种"外来"语言的保证时,实际上会做任何间接称为C++静态块,是吗?

故事的简短版本。 即使你用 C 语言编程,如果你想正确处理一个C++库,你也需要用 C++ 编译你的 main。