gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:31:08 25 4
gpt4 key购买 nike

我正在尝试向需要使用 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

用 g++ 编译没有问题。

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

undefined reference to `vtable for __cxxabiv1::__class_type_info'
undefined reference to `__cxa_pure_virtual'

在测试中,当我添加 stdc++ 库时,这些错误消失并允许程序编译,但这不是较大的 C 项目的选项。有没有办法编译 C 程序以访问 C++ 库而没有这些错误并且没有 stdc++?错误的处理指的是 C++ 库深处的模块,而不是在 mywrapper.h 中引用的模块,那么为什么 C 程序甚至试图引用它们呢?

最佳答案

C++ 库依赖于标准 C++ 库(libstdc++,链接器的 -lstdc++ 选项,如果您通过 g++ 运行链接器则默认)。这是事实。对此无能为力。克服它。

包装器 header 不引用那些符号,而是库中的实际对象文件 do。因此需要定义它们,定义它们的方法是包含标准 C++ 库。

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

关于c++ - 如何在不需要 stdc++ 链接的情况下将 C 程序连接到 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com