题
在 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
'。修复方法是使其静态。得到教训:
- osx 在符号名称中添加前导 _。直到我在 Linux 上运行 nm 并看到没有前导 _ 的相同符号,我才开始在代码库中搜索“
dbg_
“ 代替 ”_dbg_
" - osx 的抱怨是正确的
- 讽刺的是,剪切和粘贴我不完全理解的调试宏给我带来了很多麻烦
其他提示
您可能要检查如果这两个库#include
该声明_dbg_char
但错过extern
关键字的头文件。也许这就是#ifdef
“编出其他平台,你只打在OS X上的问题。
不隶属于 StackOverflow