Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ libACE和clang/clang++;,未定义对“ACE_Atomic_Op<;ACE_线程_互斥体,长>;_C++_C++11_Clang_Clang++_Ace - Fatal编程技术网

C++ libACE和clang/clang++;,未定义对“ACE_Atomic_Op<;ACE_线程_互斥体,长>;

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

我正在使用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_原子操作::运算符--():
/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