我试图将一些代码添加到需要使用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程序甚至试图引用它们呢?