3

私は、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): 未定義の参照が返される

しかし、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 のバグですか? mingw の Windows バージョンでコンパイルできますか?

編集:実際にはそうでしたので、fedora mingw64パッケージのバグに違いありません

4

3 に答える 3

2

実際、私はまだ同じ結果を得続けているので、必ず報告します。ありがとう

于 2013-08-12T16:24:39.240 に答える