ld:重复符号_dbg_char

发布于 2024-07-26 15:32:01 字数 341 浏览 6 评论 0原文

在 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

Getting a linker error on osx (no errors on linux or fbsd for the same code):

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

the 2 libs listed in the error are mine but the symbol isn't. c++flint confirms '_dbg_char' is in both libs but I'm not sure how to find where it comes from.

tricks, strategies, outright answers for how to id _dbg_char would be greatly appreciated.

project is using libtool/autotools and gcc 4.01

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绝對不後悔。 2024-08-02 15:32:01

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

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

Found a logging / debug macro that was defining dbg_char by 'dbg_ ## t'. fix was to make it static. lessons learned:

  1. osx adds a leading _ to symbol names. it wasn't until i ran nm on linux and saw the same symbol without the leading _ that i thought to search the codebase for "dbg_" instead of "_dbg_"
  2. osx was right to complain
  3. rich irony that cut-and-pasting a debug macro i didn't fully understand caused me so much trouble
生生不灭 2024-08-02 15:32:01

您可能想要检查两个库 #include 是否都是声明 _dbg_char 但缺少 extern 关键字的头文件。 也许其他平台上的#ifdef 已经被淘汰了,所以你只会在 OS X 上遇到这个问题。

You might want to check if both libs #include a header file that declare _dbg_char but miss the extern keyword. Maybe that's #ifdef 'ed out for other platforms so you only hit that problem on OS X.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文