web-dev-qa-db-ja.com

ブーストリンカーエラー:未解決の外部シンボル "class boost :: system :: error_category const&__cdecl boost :: system :: get_system_category(void)"

私は初めてBoostを使い始めました、詳細:

  1. Visual Studio 2008 SP1を使用しています
  2. X64ビルドを実行しています
  3. 私は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

これは、システムlib内のリンクが完全であることを示しているようです。

28
Alex Black

私は問題を解決しました。 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
44
Alex Black
#include <boost/system/config.hpp>

私の場合、BOOST_LIB_DIAGNOSTICはシステムが自動的にリンクされていることを示しませんでした。単にboost/system/config.hppを含めることでこれを解決しました。

5
Jeffrey Faust

Boost_systemライブラリにリンクする必要があります

1
Maik Beckmann

私も同じ問題を抱えていました。上記のすべてを試しましたが、何の助けにもなりません。解決策は簡単でした:最初に空のプロジェクトで作業しましたが、そこでリンカーエラーLNK2019が発生しました。しかし、stdafx.h、targetver.h、およびstdafx.cppファイルを使用して新しいデフォルトのWin32コンソールアプリケーションを作成すると、すべてが機能しました。誰かに役立つかもしれませんが、私はこれに2日を費やしています

1
Pavel

プロジェクトでboost :: systemを使用する場合は、x86またはx64バージョンのboost :: system libを使用して指定する必要があります。

次のバッチファイルを使用して、Boostライブラリを再コンパイルできます。これらをBoostルートフォルダーに保存し、CMDウィンドウで実行します(ダブルクリックしないでください)。

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/ =

1
Protoss

私はこのリンカーエラーとCMakeのためにここから来ましたが、私の場合、デフォルトでCMakeがデフォルトで32ビットでビルドしようとするのは事実でした。これは-Ax64を指定することで修正されました

cmake -Ax64 {path to CMakeLists.txt}
0
Joe Staines

私はリンカーエラーとCMAKEを検索して質問に来たので、他の誰かがこの質問を同じ方法で見つけた場合に備えて、このコメントをここに追加します。

私の場合のリンカエラーは誤ったことが原因であることがわかりました:

    add_definitions(-DBOOST_ALL_DYN_LINK)

の中に CMakeLists.txt、これはUnixでは問題ありませんが、私の場合はWindowsでは問題ありません。ソリューションは、Windowsで定義されているものを使用していません。

0
Barry

両方のバージョンが必要で、stageターゲットを使用したため、x86バージョンには--stagedir =。/ stageX86を、x64にはデフォルトの./stageを使用しました

0
Eugenio Miró