ページ 11

一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)

Posted: 2016年7月30日(土) 17:35
by keito
プログラミング歴はC言語1年半、C++2週間程度です。説明不足や誤用・誤植があったらすみません・・・・・・。

拡張ライブラリBoost(1.61.0.0)を使って処理時間の計測などの機能を使いたいのですが、ディレクトリパスを通したのにも関わらずビルドに失敗してしまいます。

IDE / Visual Studio 2015 Express for Windows Desktop [Visual C++ 2015]
(↓処理時間の計測、 https://boostjp.github.io/tips/timer.htmlと同じ)

コード:

//処理時間の計測
//インクルード ディレクトリ パス > D:\ConsoleApplication1\packages\boost.1.61.0.0\lib\native\include
#include <iostream>
#include <cmath>
#include <boost/timer/timer.hpp>

int main()
{
	boost::timer::cpu_timer timer; // 時間計測を開始

	for (long i = 0; i < 100000000; ++i) {
		std::sqrt(123.456L); // 時間のかかる処理
	}

	std::string result = timer.format(); // 結果文字列を取得する
	std::cout << result << std::endl;
}
1>------ すべてのリビルド開始: プロジェクト:ConsoleApplication1, 構成:Debug Win32 ------
1> test.cpp
1>LINK : fatal error LNK1104: ファイル 'libboost_timer-vc140-mt-gd-1_61.lib' を開くことができません。
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

その他に、
多倍長整数(boost/multiprecision/cpp_int.hpp)、統計処理(boost/accumulators/accumulators.hpp等)などはインクルードできましたが、
日付の計算(boost/date_time/gregorian/gregorian.hpp、乱数(boost/random.hpp等)などはインクルードするとビルドに失敗してしまいます。

リンカツールエラ―LNK1104については調べましたが、結局どこがどう問題なのかが分からずに困っています。

どうか分かりやすく対策法を教えて下さると助かります

Re: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)

Posted: 2016年7月30日(土) 19:30
by tk-xleader
Boost.Timerはビルド済みのバイナリが必要なのですが、ビルド済みのバイナリは用意しましたでしょうか?

もししていない場合、Boostライブラリのビルド方法にしたがって自分でバイナリを作成するか、もしくはhttps://sourceforge.net/projects/boost/ ... -binaries/からバイナリをダウンロードするかして用意することになります。

既にバイナリは用意しているということであれば、リンカへの設定でライブラリパスを指定することでリンクできるようになると思います。

Re: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)

Posted: 2016年7月30日(土) 19:37
by derok
https://boostjp.github.io/tips/build_link.html
にある通りboostの一部ライブラリはビルドが必要です。
https://boostjp.github.io/howtobuild.html
を参考にビルドするか、VS 2015ならプロジェクト->NuGetパッケージマネジャーからBoostを検索しインストールする手もあります。
また、時間の測定ならstd::chrono
http://ja.cppreference.com/w/cpp/chrono
乱数ならstd::random
http://cpprefjp.github.io/reference/random.html
https://cpplover.blogspot.jp/2009/11/c0xrandom.html
を使うという方法もあります。

Re: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)

Posted: 2016年8月01日(月) 00:47
by keito
回答ありがとうございます。
色々あって1日掛かってしまいましたが、以下の手順で無事ビルドすることが出来ました、ありがとうございます。

1.http://www.boost.org/users/download/#liveからダウンロード
2.VS2015 x86 Native Tools コマンド プロンプトを起動、以下のコマンドを入力
pushd (解凍したディレクトリ先)
  例) D:\にboost_1_61_0ファイルを作成した場合 → pushd D:\boost_1_61_0
3.64ビット版では b2.exe --toolset=msvc-14.0 --build-type=complete architecture=x86 address-model=64 -j 8 stage
32ビット版では b2.exe --toolset=msvc-14.0 --build-type=complete stage
  を入力。
4.Visual Studioのプロパティページを開き、VC++ ディレクトリ → インクルードディレクトリを指定
  例) D:\にboost_1_61_0ファイルを作成した場合 → D:\boost_1_61_0;$(IncludePath)
5.リンカ― → 追加のライブラリディレクトリを指定
  例) D:\にboost_1_61_0ファイルを作成した場合 → D:\boost_1_61_0\stage\lib
6.出来ました