web-dev-qa-db-ja.com

致命的なエラーLNK1104:ファイル 'libboost_system-vc110-mt-Gd-1_51.lib'を開けません

これが機能しないようです。 Boostライブラリを必要とする単純なコンソールアプリケーション(websocket++ライブラリに依存)を作成しましたが、コンパイルしようとすると次のようになります。

致命的なエラーLNK1104:ファイル 'libboost_system-vc110-mt-Gd-1_51.lib'を開けません

ただし、(boost_root)/stage/libsにlibを作成するbjamを実行し、libsへのパスをコンパイラC++/Additionnals includesにリンクしました。

(boost_root)/stage/libsを見ると、ファイルlibboost_system-vc110-mt-Gd-1_51.libはありません。代わりにlibboost_system-vc110-mt-sgd-1_51.libと呼ばれます。

何か案が?

75
Rushino

C++→General→Additional Include Directoriesパラメータは、コンパイラがヘッダーファイルを検索するディレクトリをリストするためのものです。

リンクするライブラリを探す場所をリンカーに指示する必要があります。この設定にアクセスするには、Solution Explorerウィンドウでプロジェクト名を右クリックしてから、Properties→Linker→一般→追加のライブラリディレクトリ。ここに<boost_path>\stage\libと入力します(これは、 build Boost をデフォルトオプションを使用する場合にライブラリが配置されるパスです)。

83
Praetorian

これは、自分でC++を勉強している私のようなアマチュアにとって最も簡単な方法です。

まず、boostライブラリを任意のディレクトリに解凍します。 c:\directoryをお勧めします。

  1. ビジュアルC++を開きます。
  2. 新しいプロジェクトを作成します。
  3. プロジェクトを右クリックします。
  4. プロパティをクリックします。
  5. C/C++をクリックします。
  6. 一般をクリックします。
  7. 追加のインクルードライブラリを選択します。
  8. ライブラリの宛先を含めます。例えばc:\boost_1_57_0
  9. プリコンパイラヘッダーをクリックします。
  10. プリコンパイル済みヘッダーの作成/使用をクリックします。
  11. プリコンパイル済みヘッダーを使用しないことを選択します。

次に、問題が発生した場合はリンクライブラリに移動します。

  1. 抽出されたファイルはc:\boost_1_57_0でした。
  2. booststrap.batをクリックします(コマンドウィンドウに入力するのを気にせずに、解決するのに2週間かかった問題があった場所であるウィンドウを閉じないでください。しばらくするとbooststrapは実行され、同じファイルを生成しますが、現在は2つの異なる名前:b2bjamを使用しています。
  3. b2をクリックして、実行を待ちます。
  4. bjamをクリックして、実行を待ちます。次に、stageというフォルダーが生成されます。
  5. プロジェクトを右クリックします。
  6. プロパティをクリックします。
  7. リンカーをクリックします。
  8. 一般をクリックします。
  9. 追加のライブラリディレクトリを含めるをクリックします。
  10. ライブラリの一部を選択しますc:\boost_1_57_0\stage\lib

そして、あなたは行ってもいいです!

82
Wu Jie

同じ問題がありました。原因は、Visual C++ 2010(v100)でBoostをコンパイルし、誤ってVisual Studio 2012(v110)でライブラリを使用しようとしたためです。

そこで、構成を(Visual Studio 2012で)プロジェクトプロパティ-> 一般-> Plataform Toolsetに変更し、値を- Visual Studio 2012(v110) to Visual Studio 2010(v100).

6
Jamillo Santos

さらに別のソリューション:

私はLink-> Additional Dependenciesプロパティにboost_regex-vc120-mt-Gd-1_58.libを含めていたので困惑しましたが、リンクはlibboost_regex-vc120-mt-Gd-1_58.libを開くことができないと私に言い続けました( libプレフィックスに注意してください)。 libboost_regex-vc120-mt-Gd-1_58.libを指定しませんでした。

ブーストダイナミックライブラリ(.dll)を使用しようとしました(そしてビルドしていました)が、BOOST_ALL_DYN_LINKマクロが定義されていませんでした。どうやら、ライブラリを含めるためのコンパイルのヒントがあり、BOOST_ALL_DYN_LINKがないと、動的ライブラリ(libプレフィックスなし)ではなく、静的ライブラリ(libプレフィックス付き)を探します。

5
wdtj

私は同じ問題を抱えていましたが、私の間違いは、v110ではなくバージョンv100(プロジェクトプロパティ-> ConfiguratioProperties-> General-> platformTooset)を持つvisual c ++ 2010で使用するバイナリboost_1_55_0-msvc-11.0-32.exeをインストールしたことでしたVisual C++ 2012として。したがって、boost_1_55_0-msvc-10.0-32.exeをダウンロードしましたが、今のところすべてが問題ありません。

3
Plinio

ブーストの構築に問題がある場合、またはブーストを行わない場合は、代わりに SourceForge からlibファイルをダウンロードします。リンクをクリックすると、バージョン1.51の圧縮されたlibおよびdllファイルのフォルダーが表示されます。ただし、リンクを編集して、選択するバージョンを指定できる必要があります。 BoostProのインストーラーにはいくつかの問題があるようです。

2
Bob Bryan

ブーストユニットテストを使用しようとすると同様の問題が発生しましたVisual Studio 2015(Community Edition):

致命的なエラーLNK1104:libboost_unit_test_framework-vc140-mt-1_57

だから私は自分の解決策を共有すると思った。

ブーストユニットテストプロジェクトは、次の2つの方法で作成できます(このソリューションは両方で機能します)。

  1. Boost Unit Test Adapter を使用して
  2. または、Win32コンソールアプリケーションを作成し( ステップ )、メイン関数をブーストユニットテスト関数に置き換えます( ステップはここ )。

両方のプロジェクトを機能させるために私が従った手順は次のとおりです。

まず、目的のブーストバージョンをダウンロードします(たとえば、 boost_1_57_ )。正しいバイナリ(msvc v140を使用してコンパイル)でブーストをダウンロードするか、コマンドラインから次のコマンドを実行して自分でバイナリを抽出できます。

  1. bootstrap.bat
  2. 「C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\vcvarsall.bat」x86
  3. bjam --clean
  4. bjam -j4 --debug-symbols = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared address-model = 32

msvc-14.0は、Visual Studio 2015バージョン(VS 2015 = v14.0 = v140)が必要であることを指定し、address-model = 32は、プラットフォーム32が必要であることを指定します(ただし、64ビットでも同じことができます)。

バイナリを入手したら、Visual Studioに移動して、作成したBoost Unit Testingプロジェクトを選択します。 プロジェクトプロパティ>構成(メインメニューから)に移動し、次の選択を行います。

  • General> Platform Toolset」をVisual Studio 2015(v140)に設定します。

  • ブーストフォルダーへのパス(例:C:\ boost_1_57_0)とバイナリファイルを含むサブフォルダーへのパス(例:C:\ boost_1_57_0\stage\lib)

    • C\C++>追加インクルードディレクトリ
    • および「リンカー>追加のライブラリディレクトリ」。
1
Aciel

b2 -j%cores%toolset =%msvcver%address-model = 64 architecture = x86 link = static threading = multi runtime-link = shared --build-type = minimal stage --stagedir = stage/x64

プロパティ→リンカー→一般→追加のライブラリディレクトリ$(BOOST)\ stage \x64\ lib

0
Dmitry Ivanov

ここで同じ問題が報告されました。 mainTest.cppをサブフォルダーsrc/mainTest /からメインフォルダーsrc /に移動する問題を解決しました。これもあなたの問題だったと思います。

0
fiorentinoing

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

私の場合、古い継承プロジェクトではbootstrap/bjamは利用できませんでした(ライブラリはプリコンパイルされ、SCMにコミットされました)。ライブラリには、ファイル名にVCまたはBOOSTバージョン管理がありません。例:libboost_regex-mt-sgd.lib、ただしProcessed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libは何らかの形で自動的にトリガーされました。

バージョン管理されていないファイル名を手動で追加することにより修正:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

...vc120-mt-sgd-1_55.libをブラックリストに追加

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
0
kevinf