c++ - gcc:在 C++ 应用程序中链接 C 库导致 "multiple definition of"错误

标签 c++ gcc multiple-definition-error

我有一个工作的 C 库,我想使用 gcc 链接到 C++ 应用程序,但链接器 (g++) 给我“多重定义”错误。使用 C 应用程序和 gcc 它可以工作。 定义接口(interface)的 header 都包含:

#ifdef __cplusplus 
extern "C" {
#endif

我使用“nm”命令检查了库,它确实有多个方法定义(有问题的方法不是来自公共(public)接口(interface))。

我的问题是:

  1. 为什么我的库有多个定义(有些有 T 而有些有 U)?

  2. 如果包含文件的应用程序是 C 应用程序(我正在使用 -Wall 构建),为什么它可以工作?

  3. 我是否需要任何特殊属性或使用特定文件扩展名才能使其正常工作,或者我是否需要返回编程学校:)?

更多地关注 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/

相关文章:

C++ 更快的字符串解析?

linux - 在 Linux 中安装 Boost

c++ - '转换': 'class' OpenGL 3D type redefinition

c++ - visual c++ <limits> 常量的多个定义

c++ - DMA写入SD卡(SSP)不会写入字节

c++ - C++下的socket问题

python - 遗留 GDB 脚本中堆栈跟踪的停止条件

创建一个简单的动态库

c++ - 多重定义编译错误

c++ - 当我在 QT 中为 QInputDialog 输入密码时,如何设置背景非事件和灰色?