Boostについて教えてください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
RIVA

Boostについて教えてください

#1

投稿記事 by RIVA » 1ヶ月前

VC++でMySqlを扱いたくて色々調べてたら
検索でここの掲示板を知りました

C++からMySqlにアクセスするにはMySql Server以外に
MySql Connector/C++とBoostが必要と書いてあったので
Boostのインストールに励んでいました
色々試してサンプルを動かそうとすると
Boostの.libファイルが開けないというような
エラーが起きてしまいました
インストールされているboostのlibファイルはファイル名に
vc140とかっていう感じになっていたのですが
必要となるlibファイルはvc100という文字列が含まれていました
boostのライブラリをコンパイルするコマンドでtoolset=msvc-14.0
という文字列が含まれていたのでこれのせいで
libファイルがvc140になってしまったのかと
toolset=msvc-10.0にしてコンパイルし直したら
無事boostライブラリが使える様になりました
結局boostのインストールはネットに書いてあるのを参考にしたのですが
二か所くらい参考にしたサイトではtoolset=msvc-14.0になっていました
本来はtoolset=msvc-14.0でも問題ないのでしょう?
もしそうならどうすれば良かったのでしょうか?
どなたか教えてくださいませ

Bull
記事: 138
登録日時: 5年前

Re: Boostについて教えてください

#2

投稿記事 by Bull » 1ヶ月前

Boost に限りませんが、.lib をビルドするときと .exe をビルドするときは、原則としてコンパイラのバージョンを合わせる必要があります。
ライブラリをビルドするときに指定した toolset(=コンパイラ)で msvc-14.0 を指定したと言うことは、Visual C++ 14.0 (Visual Studio 2015) 向けのライブラリをつくるということです。

.exe をビルドするときに vc100 を要求されたと言うことは、Visual C++ 10.0 (Visual Studio 2010) でビルドしたものと思われます。

toolset=msvc-10.0 でライブラリを作り直して、うまく行ったのであればそれで正解です。

Bull
記事: 138
登録日時: 5年前

Re: Boostについて教えてください

#3

投稿記事 by Bull » 1ヶ月前

ちょっと説明不足だったので補足します。
toolset で指定するのは Visual C++ のバージョンです。
Visual Studio の製品名と Visual C++ のバージョンが一致しないので混乱しますが、以下のようになっています。(括弧の中は Visual Stduio のバージョンです。)

VC++ 製品名
10.0 : Visual Studio 2010 (10.0)
11.0 : Visual Studio 2012 (11.0)
12.0 : Visual Studio 2013 (12.0)
14.0 : Visual Studio 2015 (14.0)
14.1 : Visual Studio 2017 (15.0)
14.2 : Visual Studio 2019 (16.0)

RIVA

Re: Boostについて教えてください

#4

投稿記事 by RIVA » 1ヶ月前

Bullさん、ご回答ありがとうございます
VC++のバージョンと製品のバージョンの対応表ありがとうございます
msvc-14.0用にコンパイルして.exeをビルドするときに10.0用のライブラリを求められて
ビルドに失敗した場合にはVisual Studio 2015で作成するプログラムのプロジェクトを作れば
良かったということでしょうか?
あと、Boostライブラリで
date_time, regex, thread, python, signals, test, filesystem, serialization, program_options 以外の全ライブラリは、ヘッダを #include するだけで、すぐに使用できます。
と、ありますが実際にライブラリのパスを通さずに
ビルドできたりして、それで余計に混乱してしまいました
ヘッダファイルには関数のプロトタイプ宣言やマクロの定義などで
関数の実体は記述されていないですよね?
何故ヘッダファイルのインクルードだけで動いたりするのでしょうか?

Bull
記事: 138
登録日時: 5年前

Re: Boostについて教えてください

#5

投稿記事 by Bull » 1ヶ月前

RIVA さんが書きました:
1ヶ月前
msvc-14.0用にコンパイルして.exeをビルドするときに10.0用のライブラリを求められて
ビルドに失敗した場合にはVisual Studio 2015で作成するプログラムのプロジェクトを作れば
良かったということでしょうか?
msvc-140 でライブラリを作成したのなら、Visual Studio 2015 で .exe をビルドすれば、リンクでエラーになることはなかったと思われます。
RIVA さんが書きました:
1ヶ月前
あと、Boostライブラリで
date_time, regex, thread, python, signals, test, filesystem, serialization, program_options 以外の全ライブラリは、ヘッダを #include するだけで、すぐに使用できます。
と、ありますが実際にライブラリのパスを通さずに
ビルドできたりして、それで余計に混乱してしまいました
ヘッダファイルには関数のプロトタイプ宣言やマクロの定義などで
関数の実体は記述されていないですよね?
何故ヘッダファイルのインクルードだけで動いたりするのでしょうか?
C++ の標準ライブラリ std::vector とか std::string などですが、これらもヘッダーだけで構成されます。一部 iostream の std::cout や std::cerr などは別にコンパイルされたライブラリが必要になりますが、ほとんどのものはヘッダーだけです。ヘッダーファイルの中に関数の実体も記述されています。boost もそうなっているのだと思います。

詳細な説明は省きますが、テンプレートライブラリは関数本体を別のソースファイルに記述して、コンパイルしてライブラリにしておくことができないので、ヘッダーファイルに全て記述されています。
boost でも多くのライブラリが .lib を作成しなくても、ヘッダーファイルをインクルードしただけで使用できます。

RIVA

Re: Boostについて教えてください

#6

投稿記事 by RIVA » 1ヶ月前

Bullさん、回答ありがとうございます
ライブラリのバージョンの話
理解しました
C++の標準ライブラリやBoostライブラリ
でもヘッダファイルに関数の記述してたり
するのですね

返信

“C言語何でも質問掲示板” へ戻る