致命的なエラーLNK1104:ファイルを開くことができません 'libboost_system-vc110-mt-gd-1_51.lib'


88

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

致命的なエラーLNK1104:ファイルを開くことができません 'libboost_system-vc110-mt-gd-1_51.lib'

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

(boost_root)/stage/libsがファイル を見るとlibboost_system-vc110-mt-gd-1_51.libそこにありません。libboost_system-vc110-mt-sgd-1_51.lib代わりに呼び出されます。

何か案が?


1
bjamを使用して完全なビルドを実行してlibboost_system-vc110-mt-gd-1_51.libファイルをビルドできましたが、それでもエラーが発生します。
ルシノ2012年

22
を開き、VS2012 developer command promptブーストルートディレクトリに移動してと入力しbootstrap、と入力するb2と、ライブラリファイルの完全なセットが取得されます。
ジェシーグッド

インクルードパスとリンカーパスをプロジェクトに追加しましたか?
ジェシーグッド

1
でアプリケーションを構築しています/MDか?
マヘシュ

コンパイルする代わりにダウンロードしても問題ない場合は、ここからライブラリを入手してください:code.ingres.com/boostlib/trunk/stage/lib
gorogm

回答:


93

追加のC ++→一般→は、ディレクトリのインクルードコンパイラがヘッダファイルを検索するディレクトリをリストするためであるパラメータを。

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


boost_pathとは何か説明してもらえますか
ggsmartboy

1
@ggsmartboyこれはブーストソースファイルが存在するパスです(コンパイラにリストするのと同じパスにパスが含まれているため、ブーストヘッダーを見つけることができます)。答えは、デフォルトのビルドオプションを使用して(ディストリビューションを使用せずに)自分でブーストをビルドしたことを前提としています。
プレトリアン

驚くばかり。私も本当の頭痛を救った。ブーストのドキュメントでこれを見つけることができなかったのはなぜですか(そこにある場合でも)、わかりません!:)
absentmindeduk 2014

2
この回答で参照されている設定は、プロジェクトを右クリックしてプロパティを選択すると見つかります(私のような初心者の場合は、ソリューションを右クリックして、[ツール]> [オプション]などに移動します。ただし、これらのオプションはすべてのプロジェクトに存在していませんでした)。VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_Dそうです、読者がその部分を知っていると思いました。更新しました。
プレトリアン2015

97

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

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

  1. Visual 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つの異なる名前を持つ:b2、とbjam
  3. をクリックしb2て、実行されるのを待ちます。
  4. をクリックしbjamて、実行されるのを待ちます。次に、と呼ばれるフォルダが作成されstageます。
  5. プロジェクトを右クリックします。
  6. プロパティをクリックします。
  7. リンカーをクリックします。
  8. 一般をクリックします。
  9. [追加のライブラリディレクトリを含める]をクリックします。
  10. ライブラリの一部を選択しc:\boost_1_57_0\stage\libます。例:。

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


3
Wu Jieに感謝します-私はこれまでこのようなことをしたことがありませんでした。これらの手順は、Boostをビルドし、リンクに問題があった「libboost_serialization-vc140-mt-gd-1_57.lib」ライブラリファイルを生成するために必要なものでした。 )
Vixxd 2015

5
おかげで、私は素敵な詳細な指示が好きです。ブーストを設定するステップ2/3/4では、代わりに次のようにしました。a)rootとしてコマンドラインプロンプト開きます。b)boost_1_57_0ディレクトリに移動します。c)タイプbootstrap.bat(10〜20秒かかりました); d)./b2指示どおりに入力します(完了までに30〜40分かかりました)。
ダレン・クック

1
通常のコマンドプロンプトは「cl」コマンドの処理方法を知らなかったため、VisualStudioコマンドプロンプトを使用してbootstrap.batを開く必要がありました。
jlaverde 2017年

2018年2月20日、あなたのソリューションは私のために機能します(VS2017 + Boost1.66)。どうもありがとうございます。
caTx 2018

初心者向けの手順をありがとうございます。いつもあなたのようにみんなが答えてくれるといいのですが。
Mudit Jain 2018

6

私も同じ問題を抱えていました。これは、BoostをVisual C ++ 2010(v100)でコンパイルし、誤ってVisual Studio 2012(v110)でライブラリを使用しようとしたことが原因でした。

そこで、(Visual Studio 2012で)構成を[プロジェクトのプロパティ] -> [一般] -> [ Plataform Toolset]に変更し、値をVisual Studio 2012(v110)からVisual Studio 2010(v100)に変更しました


7
プラットフォームツールセットをv100を使用するように変更すると、VS2012IDEにVS2010に付属のコンパイラを使用するように指示していることに気付くと思います。VS2012コンパイラに追加されたC ++ 11機能は使用できなくなります。より良い解決策は、VS2012コンパイラを使用してBoostをコンパイルすることです。Boostはコンパイラのバージョン番号を出力ファイル名に入れるため、2010年と2012年の両方から生成されたライブラリを共存させることができます。
プレトリアン2013年

あなたは正しいです、そして私は知っています。ライブラリとコンパイラをアップグレードするとどうなるか心配です。したがって、プロジェクトが終了したら、これらすべてを修正します。ありがとう!
Jota Santos

6

さらに別の解決策:

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プレフィックス付き)が検索されます。


まだ1つの賛成票しかありませんが、私は数か月ごとにここにいることに気づき、私の問題の解決策が何であるかをもう一度思い出させます!!
Neil Gatenby 2017年

3

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


2

Boostの構築に問題がある場合、またはそれを望まない場合は、SourceForgeからlibファイルをダウンロードすることもできます。リンクをクリックすると、バージョン1.51のzipファイルとdllファイルのフォルダーに移動します。ただし、リンクを編集して、選択したバージョンを指定できるはずです。どうやらBoostProのインストーラーにはいくつかの問題があります。


2

Visual Studio 2015(Community Edition)でブースト単体テストを使用しようとしたときに同様の問題が発生しました。

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

だから私は自分の解決策を共有したいと思いました。

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

  1. 使用してブーストユニットテストアダプタ
  2. または、Win32コンソールアプリケーションを作成し(ここの手順)、main関数をブーストユニットテスト関数に置き換えます(ここの手順)。

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

まず、目的のブーストバージョン(たとえば、boost_1_57_0)をダウンロードします。正しいバイナリ(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)、およびアドレス・モデルが= 32、我々はプラットフォーム32を必要とする(しかし、同じ64ビットのために行うことができる)ことを指定します。

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

  • "に設定し一般>プラットフォームツールセットをVisual Studioの2015(V140)に"。

  • ブーストフォルダーへのパス(例:C:\ boost_1_57_0)とバイナリファイルを含むサブフォルダーへのパス(例:C:\ boost_1_57_0 \ stage \ lib)を次の場所に含めます。

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

1

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

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


それらの行が何をしているのか、そしてその理由についてもう少し詳しく説明すると、この回答の質が向上するのに役立ちます。
アントンメンショフ

0

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


0

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

私の場合、古い継承プロジェクトではブートストラップ/ 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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.