在 osx 上出现链接器错误(对于相同的代码,在 linux 或 fbsd 上没有错误):

ld: duplicate symbol _dbg_char in .libs/liboekernel_la-OEK_get.o and .libs/liboekernel_la-OEK.o

错误中列出的 2 个库是我的,但符号不是。c++flint 确认“_dbg_char”在两个库中,但我不确定如何找到它的来源。

关于如何 id _dbg_char 的技巧、策略、直接答案将不胜感激。

项目正在使用 libtool/autotools 和 gcc 4.01

有帮助吗?

解决方案

找到了一个通过 ' 定义 dbg_char 的日志记录/调试宏dbg_ ## t'。修复方法是使其静态。得到教训:

  1. osx 在符号名称中添加前导 _。直到我在 Linux 上运行 nm 并看到没有前导 _ 的相同符号,我才开始在代码库中搜索“dbg_“ 代替 ”_dbg_"
  2. osx 的抱怨是正确的
  3. 讽刺的是,剪切和粘贴我不完全理解的调试宏给我带来了很多麻烦

其他提示

您可能要检查如果这两个库#include该声明_dbg_char但错过extern关键字的头文件。也许这就是#ifdef“编出其他平台,你只打在OS X上的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top