ブーストリンカーエラー:未解決の外部シンボル「class boost::system::error_category const & __cdecl boost::system::get_system_category(void)」
-
21-08-2019 - |
質問
初めて Boost を使い始めたところです。詳細:
- Visual Studio 2008 SP1 を使用しています
- x64 ビルドを実行しています
- 私は boost::asio のみを使用しています (およびその依存関係もすべて)
コードがコンパイルされ、(x64 ライブラリをビルドした後) プロジェクトをブースト ライブラリに指定して単純な問題を解決しましたが、リンカー エラーが発生しました。
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" (?get_system_category@system@boost@@YAAEBVerror_category@12@XZ)
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" (?get_generic_category@system@boost@@YAAEBVerror_category@12@XZ)
何か案は?
この定義を追加しました:#define BOOST_LIB_DIAGNOSTIC
そして今、私の出力にはこれが表示されます:
1>Linking to lib file: libboost_system-vc90-mt-1_38.lib
1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib
1>Linking to lib file: libboost_regex-vc90-mt-1_38.lib
これは、実際にシステムライブラリにリンクしていることを示しているようです。
解決
私は問題を解決しました。私は、64ビット・ライブラリを構築することを意図していたとき、私は32ビット・ライブラリーを構築していました。私は私のビルド声明を固定し、64ビットのライブラリを構築し、今では動作します。
ここに私のbjamのコマンドラインがあります:
C:\Program Files (x86)\boost\boost_1_38>bjam --build-dir=c:\boost --build-type=complete --toolset=msvc-9.0 address-model=64 architecture=x86 --with-system
他のヒント
#include <boost/system/config.hpp>
私の場合は、BOOST_LIB_DIAGNOSTICは、システムが自動的にリンクされて表示されませんでした。私は単にブースト/システム/ config.hppのを含めることによって、これを解決します。
あなたはboost_systemライブラリにリンクする必要があります。
私は同じ問題を抱えていました。私はすべてが上記の試してみましたが、何も助けません。解決策は単純だった:最初に、私は空のプロジェクトで働いていたし、そこに私は、リンカエラーLNK2019を持っていました。私はstdafx.hを持つ新しいデフォルトのWin32コンソールアプリケーションを作成したときしかし、targetver.hとstdafx.cppファイルのすべてが働きました。それが誰かのために有用であろうことも、私はこのために2日間を過ごす。
使用する場合 ブースト::システム プロジェクトでは、x86 または x64 バージョンの boost::system lib を使用して指定する必要があります。
以下のバッチファイルを使用して Boost ライブラリを再コンパイルできます。これらを Boost ルート フォルダーに保存し、CMD Windows で実行します (ダブルクリックしないでください)。
call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86
cd boost_1_60_0
call bootstrap.bat
rem Most libraries can be static libraries
b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64
b2 -j8 toolset=msvc-14.0 address-model=32 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/win32
pause
詳細については、次の記事を参照してください。 https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/
私はリンカエラープラスCMAKEの検索を経由して、質問に来たので、私は場合には、ここでこのコメントを追加している他の誰がこの質問を同じ方法を見つけます。
これは、私の場合はリンカエラーが誤っによるものであったことが判明します:
add_definitions(-DBOOST_ALL_DYN_LINK)
私の場合はUnix用の罰金ですCMakeLists.txt
、ではなく、Windowsのインチ解決策は、それがWindows上で定義され使用されていません。
私は両方のバージョン、使用ステージターゲットを必要とするので、私が使用--stagedir =。/ x86バージョンおよびx64のデフォルト./stageためstageX86
私はまた、このリンカエラープラスCMakeのためにここに来たが、私の場合、cmakeのは、デフォルトでは、デフォルトで32ビットでビルドしようとしたという事実でした。これは-Ax64
を指定することで修正されました。
cmake -Ax64 {path to CMakeLists.txt}