【问题标题】:libACE and clang/clang++, undefined reference to `ACE_Atomic_Op<ACE_Thread_Mutex, long>libACE 和 clang/clang++,对 `ACE_Atomic_Op<ACE_Thread_Mutex, long> 的未定义引用
【发布时间】:2016-12-21 14:03:58
【问题描述】:

我正在使用 clang++ 3.8 ,libACE 6.3.3 编译一个应用程序,包括 -std=c++11

但我遇到了包含 ACE Atomic_OP 的问题

包括这样的标题:

#include <ace/ACE.h>
#include <ace/Thread.h>
#include <ace/TSS_T.h>
#include <ace/Atomic_Op.h>

我已经

../game/libgame.a(WorldSocketMgr.cpp.o):在函数中 ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator--()': /usr/include/ace/Atomic_Op.inl:72: undefined reference to ACE_Atomic_Op::decrement_fn_' ../game/libgame.a(WorldSocketMgr.cpp.o):在函数中 ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator++()': /usr/include/ace/Atomic_Op.inl:50: undefined reference to ACE_Atomic_Op::increment_fn_' ../game/libgame.a(WorldSession.cpp.o):在函数中 ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator=(long)': /usr/include/ace/Atomic_Op.inl:166: undefined reference to ACE_Atomic_Op::exchange_fn_' ../game/libgame.a(WorldSession.cpp.o):在函数中 ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator-=(long)': /usr/include/ace/Atomic_Op.inl:114: undefined reference to ACE_Atomic_Op::exchange_add_fn_' 铿锵声: 错误:链接器命令失败,退出代码为 1(使用 -v 查看 调用)

我该如何解决?

更新:

我变了

ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime;

ACE_Atomic_Op<ACE_Thread_Mutex, int> m_timeOutTime;

ACE_Atomic_Op<ACE_Thread_Mutex, long> m_refs;

ACE_Atomic_Op<ACE_Thread_Mutex, int> m_refs;

现在可以编译了,但我不确定它是否安全。

【问题讨论】:

  • 你在编译ACE和编译你的应用程序时是否有相同的内联设置,检查我们在调用编译器时传递的INLINE定义
  • 我正在使用来自 ubuntu 存储库的 libace-6.0.3,我没有编译它们
  • 不幸的是,我无法使用操作系统的外部 ACE 使用 clang 进行编译。所以我现在正在尝试将它包含在我的项目中:stackoverflow.com/questions/39014042/…
  • @JohnnyWillemsen 你能更好地解释一下你的意思吗?

标签: c++ c++11 clang clang++ ace


【解决方案1】:

更新

这是由 ACE 6.4.3 之前的版本中的错误引起的。现在已修复。


原答案:

回复有点晚,但我希望它可以帮助以后发现这篇文章的人。

看起来 ACE 有一个错误(或者只是没有更新他们的代码)。不幸的是,目前唯一的解决方案是破解 ACE 的文件。

您需要找到编辑 config-linux.h 或 config-macosx-snowleopard.h - 根据您使用的内容。然后你找到这块 oode 并删除它:

# ifdef __clang__
#  undef ACE_HAS_GCC_ATOMIC_BUILTINS
# endif

【讨论】:

  • 必要的更改现在是 ACE 的一部分,并将成为 ACE 6.4.3 或更高版本的一部分
  • @JohnnyWillemsen 我已经相应地更新了答案,谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-11-27
  • 2013-02-02
  • 2017-05-02
  • 2014-05-23
  • 2020-02-03
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
相关资源
最近更新 更多