C++ libACE和clang/clang++;,未定义对“ACE_Atomic_Op<;ACE_线程_互斥体,长>;
我正在使用clang++3.8、libACE 6.3.3编译一个应用程序,其中包括-std=c++11 但我对加入ACE Atomic_OP有意见 包括这些标题:C++ libACE和clang/clang++;,未定义对“ACE_Atomic_Op<;ACE_线程_互斥体,长>;,c++,c++11,clang,clang++,ace,C++,C++11,Clang,Clang++,Ace,我正在使用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(WorldSock
#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_原子操作::运算符--():
/usr/include/ace/Atomic_Op.inl:72:未定义的引用
ACE_原子运算::减量
../game/libgame.a(WorldSocketMgr.cpp.o):函数中
ACE_Atomic_Op::operator++()':
/usr/include/ace/Atomic_Op.inl:50:未定义的引用
ACE_原子运算::增量
../game/libgame.a(WorldSession.cpp.o):函数中
ACE_Atomic_Op::operator=(long)':
/usr/include/ace/Atomic_Op.inl:166:未定义的引用
ACE\u原子操作::交换
../game/libgame.a(WorldSession.cpp.o):函数中
ACE_Atomic_Op::operator-=(long)':
/usr/include/ace/Atomic_Op.inl:114:未定义的引用
ACE\u原子操作::交换\u添加\u fn\u叮当声:
错误:链接器命令失败,退出代码为1(使用-v查看
调用)
我怎样才能解决它
更新:
我变了
ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime;
ACE_原子操作m_超时;
在
ACE_原子操作m_超时;
及
ACE_原子操作m_参考;
在
ACE_原子操作m_参考;
它现在可以编译了,但我不确定它是否安全。Update
这是由版本6.4.3之前的ACE中的错误引起的。现在已经修好了
原始答复: 回复有点晚,但我希望它能帮助以后找到这篇文章的人 看起来ACE有一个bug(或者只是没有更新他们的代码)。不幸的是,目前唯一的解决办法是破解ACE的文件 您需要根据您的使用情况找到edit config linux.h或config macosx snowleopard.h。然后找到oode的这一块并将其删除:
# ifdef __clang__
# undef ACE_HAS_GCC_ATOMIC_BUILTINS
# endif
编译ACE时是否有相同的内联设置?编译应用程序时,请检查调用编译器时传递的内联定义。我使用ubuntu存储库中的libace-6.0.3,我没有编译它们。不幸的是,我无法使用操作系统中的外部ACE使用clang进行编译。所以我现在尝试将其纳入我的项目:@JohnnyWillemsen你能更好地解释一下你的意思吗?必要的更改现在是ACE的一部分,将成为ACE 6.4.3或更高版本的一部分newer@JohnnyWillemsen我已经相应地更新了答案,谢谢。
ACE_Atomic_Op<ACE_Thread_Mutex, long> m_refs;
ACE_Atomic_Op<ACE_Thread_Mutex, int> m_refs;
# ifdef __clang__
# undef ACE_HAS_GCC_ATOMIC_BUILTINS
# endif