2016-12-23 5 views
-2

LinuxからWindows環境に切り替えようとしていますが、非常に難しいパスです。Windowsでboost :: asioをコンパイルする

今回は、私がブーストライブラリで作業できるかどうかをテストしたかったのです。

私はWindowsでのboostのコンパイルに問題があったので、プリコンパイルされたバージョンをダウンロードしました。私はすべてを解凍し、ヘッダーのみの図書館員をコンパイルできることを積極的にテストしました。

次に、単純なboost :: asioの例をコピーしました。 Eclipseですべてをセットアップしました。コンパイルはうまくいったけど、リンク時に私は 'boost :: system'内部のものに '未定義リファレンス'の問題がありました。

C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()' 

ライブラリのディレクトリへのパスと同様に、 '-lboost_system'をリンクオプションに追加しました。しかし、これは役に立たなかった。

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system 

私は、ライブラリのディレクトリをチェックし、名前に「boost_system」を含むファイルの束がありました。彼らは以下のとおりです。

  • libboost_system-vc140-MT-1_62.lib
  • libboost_system-vc140-MT-GD-1_62.lib
  • libboost_system-vc140-MT-S-1_62.lib
  • libboost_system -vc140-MT-SGD-1_62.lib
  • libboost_system-vc140-S-1_62.lib
  • libboost_system-vc140-SGD-1_62.lib

私はどちらを使うべきか分からなかった。私はリンクオプションに 'libboost_system-vc140-mt-1_62'を追加しようとしましたが、私は他のすべてのファイルを試しましたが、Linuxのパターン 'libboost_system.a'にファイルの名前を変更しようとしました。

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -llibboost_system-vc140-mt-1_62 -llibboost_system-vc140-mt-gd-1_62 -llibboost_system-vc140-mt-s-1_62 -llibboost_system-vc140-mt-sgd-1_62 -llibboost_system-vc140-s-1_62 -llibboost_system-vc140-sgd-1_62 

私はここで間違っていますか? boost asio example compilation error

それはブーストのプリコンパイルされたバージョンがVisual Studionで作成されたように見えるとGと互換性がありません++: 助けてください... YotKay

+1

"-LC:\\ strange、-L" C:\\? – willll

+0

私は自分自身で解決策を見つけたと思う:http://boost.org/more/getting_started/windows.html – YotKay

+2

ポイントは、プリコンパイルされたバイナリはVisual Studioでコンパイルされていて、G ++では互換性がないということです。たわごと! – YotKay

答えて

0

は、私がこの記事のコメントの助けを借りて、それを自分で解決しました。私はMinGWをインストールすることを決めた場合、プリコンパイルされたバージョンのboostを使うことはできませんが、g ++を使ってコンパイルする必要があります。

私はそれをしました。 ライブラリをG ++でコンパイルしました。

ブーストシステムライブラリへのパスは、 c:\ Users \ jacek \ cpp \ boost_1_62_0 \ libraries \ boost \ bin.v2 \ libs \ system \ build \ gcc-mingw-6.2.0 \デバッグ\リンク静的

\と、このオプションを追加します。 -lboost_system-mgw62-D-1_62

今ブーストに問題::システムが消えます。しかし、別のものがboost asioでポップアップしますが、幸運にも答えはここにあります:MinGW linker error: winsock

この例は、私のWindows 10ノートパソコンでうまくいきます。

#include <boost/asio/io_service.hpp> 
#include <boost/asio/steady_timer.hpp> 
#include <chrono> 
#include <iostream> 

using namespace boost::asio; 

int main() 
{ 
    io_service ioservice; 

    steady_timer timer{ioservice, std::chrono::seconds{3}}; 
    timer.async_wait([](const boost::system::error_code &ec) 
    { std::cout << "3 sec\n"; }); 

    ioservice.run(); 
} 
関連する問題