gpt4 book ai didi

c++ - 在 mingw64 上使用 boost.thread 未定义对 InterlockedCompareExchange 的引用(但在 mingw32 上不存在)

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:19 25 4
gpt4 key购买 nike

我在一台装有 mingw64 和所有相关软件包的 fedora 19 x86_64 计算机上。我当时在做一个个人的 c++ 项目,我决定让它成为线程安全的,所以我决定尝试一下 Boost.thread 同步对象。我一这样做,就开始收到与 InterlockedCompareExchange 相关的链接器错误。下面的测试程序说明了我的观点:

#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>

int main()
{
boost::shared_mutex mtx;
boost::unique_lock<decltype(mtx)> lck{mtx};
}

这是命令行(我放 -lboost_thread-mt 因为没有非多线程版本,这是有道理的):

$ x86_64-w64-mingw32-g++ -std=c++11 test.cpp -o test -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -L/usr/x86_64-w64-mingw32/sys-root/mingw/lib -lboost_thread-mt -lboost_system

/tmp/cc4Wh6PO.o:test.cpp:(.text$_ZN5boost12shared_mutex28interlocked_compare_exchangeINS0_10state_dataEEET_PS3_S3_S3_[_ZN5boost12shared_mutex28interlocked_compare_exchangeINS0_10state_dataEEET_PS3_S3_S3_]+0x2f): undefined reference to `InterlockedCompareExchange' collect2: error: ld returned 1 exit status

但是对于 mingw32,它的编译就像一个魅力:

$ i686-w64-mingw32-g++ -std=c++11 test.cpp -o test -I/usr/i686-w64-mingw32/sys-root/mingw/include -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lboost_thread-mt -lboost_system

我的问题是:我做错了什么还是 mingw64 中的错误?它是否与 Windows 版本的 mingw 一起编译?

编辑:确实如此,所以它一定是fedora mingw64包中的一个bug

最佳答案

基于此页面 http://sourceforge.net/apps/trac/mingw-w64/wiki/Building%20Boost ,您可以添加 define=BOOST_USE_WINDOWS_H 以避免该链接错误。它对我有用。

关于c++ - 在 mingw64 上使用 boost.thread 未定义对 InterlockedCompareExchange 的引用(但在 mingw32 上不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com