私はこれをしばらくは続けてきました。状況を理解しているようには見えません。何が起きているのかを完全には理解していないからです(これが私がここに来た理由です)。これは、Windows上でブーストで奇妙なリンカーエラーが発生しましたか?
#include <boost/thread/thread.hpp>
#include <cstdio>
void helloworld() {
std::printf("HELLO FROM A BOOST THREAD!");
}
int main(int argc, char **argv) {
boost::thread t(&helloworld);
t.join();
}
を次のように
私はブーストのHello Worldのようなものをやっています。私はBoostディレクトリをC:\ Boostに保存しました。私はブートストラップとbjamを走らせ、すべての.libファイルを含むstage/libフォルダを持っています。ブースト/スレッドライブラリに関連するLIBファイルがされています。今、私はコンパイル
libboost_thread-vc100-mt.lib
libboost_thread-vc100-mt-1_46_1.lib
libboost_thread-vc100-mt-gd.lib
libboost_thread-vc100-mt-gd-1_46_1.lib
:
g++ -c main.cpp -I/Boost
ラインが正常に動作することを、私はmain.o.を取得します次に:
g++ -o test.exe main.o -L/Boost/stage/lib -llibboost_thread-vc100-mt
これは問題が発生する場所です。まず第一に、私が行ったように-l引数をタイプしなかった場合、MinGWはファイルを見つけることさえできませんでした。私がしようとした場合、意味:代わりに、私は上記のそれを入力した(と私はそれが行われるべきと思ったか)道の
-lboost_thread-vc100-mt
を、ldはありません、このようなファイルで終了します。私はこれらが私はブースト/スレッドから取得することになってるの機能が明らかにされている、と明らかにすることを伝えることができ、今どこかで
main.o:main.cpp:(.text+0x47): undefined reference to `_imp___ZN5boost6thread4joinEv'
main.o:main.cpp:(.text+0x55): undefined reference to `_imp___ZN5boost6threadD1Ev'
main.o:main.cpp:(.text+0x70): undefined reference to `_imp___ZN5boost6threadD1Ev'
main.o:main.cpp:(.text$_ZN5boost6threadC1IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)]+0x23): undefined reference to `_imp___ZN5boost6thread12start_threadEv'
collect2: ld returned 1 exit status
:とにかく、これは今、私はその行から取得しています出力されますそれはlibファイルを見つけるので、なぜそれが正しくリンクされていないのですか?
ありがとうございました!
EDIT:ビルドが完了した後、私はbjamを使用してブーストを再構築してきました
今 "ステージ" オプション
bjam toolset=gcc stage
、私は.Aファイルを舞台/ libフォルダに残されています、期待されるように。
g++ -o test.exe main.o -L/Boost/stage/lib -lboost_thread-mgw45-mt-1_46_1
はまったく同じエラーを出力する次のように架橋、しかし
libboost_thread-mgw45-mt-1_46_1.a
libboost_thread-mgw45-mt-d-1_46_1.a
:これらは、ブースト/スレッドに関連するライブラリです。また試しました:
g++ -o test.exe main.o -L/Boost/stage/lib -lboost_thread-mgw45-mt-1_46_1 -static
私はまだ迷っています。
'toolset = gcc'を指定するだけでは不十分ですが、MinGWでも' target-os = windows'が必要です。 – ildjarn