我正在使用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>我已经
A(WorldSocketMgr.cpp.o):在函数
ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator--()': /usr/include/ace/Atomic_Op.inl:72: undefined reference toACE_Atomic_Op::decrement_fn_./ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator++()': /usr/include/ace/Atomic_Op.inl:50: undefined reference to/libgame.a(WorldSocketMgr.cpp.o)中:函数ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator++()': /usr/include/ace/Atomic_Op.inl:50: undefined reference toACE_Atomic_Op::increment_fn_‘./ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator++()': /usr/include/ace/Atomic_Op.inl:50: undefined reference to/libgame.a(WorldSession.cpp.o):在函数ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator=(long)': /usr/include/ace/Atomic_Op.inl:166: undefined reference toACE_Atomic_Op::exchange_fn_.ACE_Atomic_Op::increment_fn_/libgame.a中):在函数ACE_Atomic_Op<ACE_Thread_Mutex, long>::operator-=(long)': /usr/include/ace/Atomic_Op.inl:114: undefined reference toACE_Atomic_Op::exchange_add_fn_‘clang: error: linker命令失败,退出代码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;它现在编译了,但我不确定它是否是一个安全的解决方案。
发布于 2016-11-12 14:02:23
更新
这是由版本6.4.3之前ACE中的一个bug引起的。现在已经修好了。
原来的答案:
反应有点晚,但我希望它能对将来找到这篇文章的人有所帮助。
看起来ACE有一个bug (或者只是没有更新他们的代码)。不幸的是,目前唯一的解决方案是破解ACE的文件。
您需要根据您使用的内容找到编辑-linux.h或配置-macosx-雪豹.h。然后找到这段代码并删除它:
# ifdef __clang__
# undef ACE_HAS_GCC_ATOMIC_BUILTINS
# endifhttps://stackoverflow.com/questions/38953849
复制相似问题