2017-02-04 8 views
7

ブーストライブラリを1.61から1.63にアップデートすることにしました。新しいファイルを使用するように更新したプロジェクトで、 tは前に取得:私の1.63ライブラリは、Visual Studio 2017を使用してコンパイルされているのでLNK2001:私のブーストライブラリが(おそらく)正しくビルドされていません

error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" ([email protected]@[email protected]@[email protected]@XZ) 
error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" ([email protected]@[email protected]@[email protected]@XZ) 

、私の最初の仮定は、私はブーストライブラリをコンパイルミスを犯したので、ここで私から取っている総ステップできたということですブーストファイルのクリーンな解凍:

  1. スタートメニュー→Visual Studio 2017 RC→Developer Comman dプロンプト
  2. 高位ディレクトリboost_1_63_0に入るまで、私はディレクトリを変更します。
  3. 私は私がusing msvc ;私は(リストの後に以下に記載するコード)私は、このファイルへの編集を行う
  4. を編集するためのboost/config/auto_link.hppを開く
  5. using msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;には変更
  6. を編集するためのproject-config.jamを開くbootstrap.bat
  7. を実行
  8. オープンコマンドプロンプトで、私はコマンドを実行しますb2 architecture=x86 address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage --stagedir=stage/x64 -a
  9. 最後に次のメッセージで完了します私のコードでこれらのライブラリを使用しようとしました。#define BOOST_LIB_DIAGNOSTICを使用して、正しいファイルが使用されていることを追跡しています。
  10. 私はboost.asioを使用するプロジェクトをコンパイルしようとし、上記の2つの未解決の外部シンボルエラーを取得します。

誰かが私の間違いを知っていますか? Visual Studio 2017 RCでVisual Studio 2015を使用してコンパイルしたブースト1.61ライブラリを使用すると、これらのエラーは発生しません。 (旧)

auto_link.hpp:

# elif defined (BOOST_MSVC) 

    // vc14: 
# define BOOST_LIB_TOOLSET "vc140" 

auto_link.hpp(新):ブーストコンパイルプロセスの最後に

# elif defined (BOOST_MSVC) && (BOOST_MSVC < 1910) 

    // vc14: 
# define BOOST_LIB_TOOLSET "vc140" 

# elif defined (BOOST_MSVC) 

    // vc15: 
# define BOOST_LIB_TOOLSET "vc141" 

メッセージ:

...failed updating 6 targets... 
...skipped 4 targets... 
...updated 904 targets... 

ライブラリ#define BOOST_LIB_DIAGNOSTIC

1>Linking to lib file: libboost_system-vc141-mt-1_63.lib 
1>Linking to lib file: libboost_date_time-vc141-mt-1_63.lib 
1>Linking to lib file: libboost_regex-vc141-mt-1_63.lib 

その他の診断情報が必要な場合は教えてください。私はboost.asioライブラリのさまざまな使用をコメントアウトしようとしましたが、ヘッダーを削除するだけでこれらの問題が完全に排除されました(もちろん、ブーストコンポーネントは使用できなくなりました)。

+0

これはエラーと関係がありますが、 'msvc'ツールセットへのパスが奇妙に見えます:' Program Files'ではなく 'Programあなたが32ビットWindows上にいるように、しかし64ビットネイティブコンパイラ( 'HostX64')を要求しているかのように。また、 'Developer Command Prompt'ショートカットは' HostX86 \ x86'(32ビットコンパイラ構築の32ビットコード)に対応しています。 64ビットコンパイラで64ビットコードをビルドするには、 'x64ネイティブツールのコマンドプロンプト'ショートカットを使うべきです。たぶん、これは何とかビルドスクリプトを混乱させるでしょうか? – bogdan

+0

新しいバージョンとのリンク中に、古いバージョンのヘッダーファイルを使用していませんか?プリプロセッサのパスを新しいブーストに更新する必要があるかもしれませんか? – Vality

+0

@bogdan私が 'E:/'ドライブにインストールした場合、通常は(Program Files)フォルダーにインストールされます。そして、私はVC2015とVC2107の両方でそれをして以来、私はそれが問題だとは思わない。私はx64ネイティブツールのコマンドプロンプトを使用して調べて、動作するかどうかを調べる予定です。 – Xirema

答えて

4

同じエラーがあるので、これはLNK 2019 error using Boost::asioと同じようです。

VS2017RCをインストールして1.63を追加しました。次に私はこの説明を使用した:Build boost with msvc 14.1 (VS2017 RC) 。注:あなたのライン

には、おそらく "cl.exe"と引用符を含める必要があります。

msvc.compile.asm bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj 
'ml64' is not recognized as an internal or external command, operable program or batch file. 
ml64 -nologo -c -Zp4 -Cp -Cx -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_EXPORT= -DBOOST_CONTEXT_SOURCE -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_EXPORT= -DBOOST_CONTEXT_SOURCE /Zi /Zd /W3 -Fo "bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj" "libs\context\src\asm\make_x86_64_ms_pe_masm.asm" 
...failed msvc.compile.asm bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj... 

64ビットの依存関係がありません:

...failed updating 6 targets... 
...skipped 4 targets... 
...updated 1214 targets... 

だからエラーメッセージを見て:;

using msvc : 14.1 : "E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\cl.exe"; 

...彼らは、プログレスバーや、そのようなを実装する必要があります) 何ゲス... KindDragonが2番目のリンクで言うように:

x86 vcvarsまたはx64 vcvarsを使用して構成されたシェルからブーストするために、Windowsのスタートメニューから「開発者コマンドプロンプトVS 2017 RC」を実行します。

64ビットコンパイラ変数を使用してシェルを構成する必要があります。 -> Visual Studio 201x -> Visual Studio Tools -> Windows Desktop Command Prompts -> VS201x x64 Native Tools Command Prompt

をし、再度構築:

cd "\Program Files (x86)\Microsoft Visual Studio 14.0\VC" 
vcvarsall amd64 

..alternatively [スタート]メニューからx64のネイティブ環境を起動することができます。

...failed updating 2 targets... 
...skipped 2 targets... 
...updated 6 targets... 

エラーメッセージfatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'。したがって、再構築が必要です。

b2 --clean-all 
etc... 

...あなたはポイントを得る。しかし、Bogdanもこれを言及しているというコメントで私は今読んでいるようだ。実際にはBuild boost with msvc 14.1 (VS2017 RC)のKinddragonが最初です;)

+0

この回答は、十分な努力を示し、私が1つを書かなくて済むようにするので、賞金を得ることに問題はないと思います。他の読者の便宜のために、結論をより顕著にすることは素晴らしいと思います。問題の原因を誰かが理解しやすくしてください。 – bogdan

+1

ありがとうbogdan。これがいい? – JHBonarius

関連する問題