我有一个工作的 C 库,我想使用 gcc 链接到 C++ 应用程序,但链接器 (g++) 给我“多重定义”错误。使用 C 应用程序和 gcc 它可以工作。 定义接口(interface)的 header 都包含:
#ifdef __cplusplus
extern "C" {
#endif
我使用“nm”命令检查了库,它确实有多个方法定义(有问题的方法不是来自公共(public)接口(interface))。
我的问题是:
为什么我的库有多个定义(有些有 T 而有些有 U)?
如果包含文件的应用程序是 C 应用程序(我正在使用 -Wall 构建),为什么它可以工作?
我是否需要任何特殊属性或使用特定文件扩展名才能使其正常工作,或者我是否需要返回编程学校:)?
更多地关注 lib.a 文件,我可以看到其中一个对象被包含了两次。例如,对于同一个对象,我有两个部分:
obj1.o
00000000 T Method
obj2.o
00000000 T Hello
obj1.o
00000000 T Method
我想这就是问题所在?
非常感谢任何帮助。
最佳答案
我的大胆猜测是“#define BLAHBLAH_H”和“#ifndef BLAHBLAH_H/#endif”设置在“extern "C"{}”之外。
关于c++ - gcc:在 C++ 应用程序中链接 C 库导致 "multiple definition of"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038303/