我试图将一些代码添加到需要使用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程序甚至试图引用它们呢?
C++库依赖于标准C++库(libstdc ++,-lstdc++链接器选项,如果通过链接器运行则默认g++).这是事实.没有什么可以做的.克服它.
该包装头并不是指那些符号,但在库中的实际对象的文件做.因此需要定义它们,定义它们的方法是包含标准C++库.
请注意,如果包装的库本身是动态的,它将知道它的依赖性,并且您不必动态地指定针对libstdc ++的链接.
| 归档时间: |
|
| 查看次数: |
2511 次 |
| 最近记录: |