如何在不需要stdc ++链接的情况下将C程序连接到C++库?

Mic*_*ran 2 c c++ linker

我试图将一些代码添加到需要使用C++库的更大的C项目中.

C++库提供了一个包装器,它使用标记为extern"C"的函数,可以访问库的功能

//Some C++ library
//mywrapper.h
#ifdef __cplusplus
extern "C" {
#endif

void wrapperFunction1( int width );
void wrapperFunction1( int height);
#ifdef __cplusplus
} // extern "C"
#endif
Run Code Online (Sandbox Code Playgroud)

这与g ++编译没有问题.

在制作C程序并包含mywrapper.h时,我不断得到引用vtable和cxa_pure_virtual的链接器错误:

undefined reference to `vtable for __cxxabiv1::__class_type_info'
undefined reference to `__cxa_pure_virtual'
Run Code Online (Sandbox Code Playgroud)

在测试中,这些错误消失了,并且在我添加stdc ++库时允许程序编译,但这不是大C项目的选项.有没有办法编译C程序来访问没有这些错误和没有stdc ++的C++库?并且错误的交易是指在C++库内部并且未在mywrapper.h中引用的模块,那么为什么C程序甚至试图引用它们呢?

Jan*_*dec 8

C++库依赖于标准C++库(libstdc ++,-lstdc++链接器选项,如果通过链接器运行则默认g++).这是事实.没有什么可以做的.克服它.

该包装并不是指那些符号,但在库中的实际对象的文件.因此需要定义它们,定义它们的方法是包含标准C++库.

请注意,如果包装的库本身是动态的,它将知道它的依赖性,并且您不必动态地指定针对libstdc ++的链接.