web-dev-qa-db-ja.com

C ++でライブラリを追加する方法

ええ、これはばかげた質問です...しかし、どちらのC++クラスでもこれをまったく実行しませんでした(ネイティブライブラリ:iostream、iomanipなどを除く)...私の質問は、ライブラリをC++に追加する一般的な説明

#includeの意味を理解しています。 C++ IDEのリンカー/ディレクトリについての手がかりがないだけです。

長い質問は短いです。 C++でライブラリをリンクするために使用される用語の一般的な説明はありますか?

MinGWでc :: bを使用しています。

22
anon235370

これ はおそらく興味があるでしょうが、ここに短いバージョンがあります:

.cpp.c、またはその他のファイルをアセンブルすると、各変換単位(つまり、各ファイル)がオブジェクトファイルを生成します。最終的な実行可能ファイルを作成するとき、すべてのオブジェクトファイルを1つのバイナリに結合します。静的ライブラリの場合、静的アーカイブ(.aまたは.lib)をすべてのオブジェクトファイルとともにバイナリ自体にコンパイルします。動的共有オブジェクト(.soまたは.dll)にリンクする場合、バイナリはグローバルオフセットテーブルの呼び出しで作成され、共有オブジェクトとオペレーティングシステムローダーとリンクすることをリンカーに通知します。プログラムを実行すると、適切なイメージが作成されます。

C++でライブラリをリンクするために使用される用語の一般的な説明

で始まります...

translation-これは、(C、Fortranなどの)高レベルコードが、変換単位によってアセンブリコードに変換される場所です。したがって、すべての.cppファイルは、特定のアーキテクチャ用にアセンブリに内部的に変換されます。

assemble-生成されたアセンブリからオブジェクトファイルを生成します。オブジェクトファイルはほとんどのマシンコードですが、実際の関数定義へのポインタとして考えることができる「未解決の外部」がたくさんあります。

linking-これはすべてのオブジェクトファイルを取得し、それらをコヒーレントバイナリに配置します。動的共有オブジェクトまたは実行可能ファイルです。前のステージからのすべての未解決の外部を見つける必要がある場所をリンカーに通知する必要があります。そうしないと、ここにエラーとして表示されます。

これで、バイナリがディスク上に置かれます。

loader-オペレーティングシステムは、ディスクからバイナリをロードします。ディスクには、プログラムイメージの構築に必要なすべての情報が含まれています。詳細は非常にプラットフォーム固有ですが、ローダーは通常、リンカーによって生成されたすべての共有ライブラリ参照を見つけ、それらを(再帰的に、各DSOが独自の依存関係を持っている可能性があるため)読み込み、それらをプログラムのメモリ空間に配置する役割を果たします。

19
Travis Gockel

これは非常に大きなトピックであり、決定的な答えを提供したくありません。しかし、あなたは Code :: Blocks を使用していると言っているので、これはプロジェクトにライブラリを追加するシーケンスです:

  • [プロジェクト]メニューに移動します
  • ビルドオプションに移動...
  • オプションダイアログで、[リンカー設定]タブを選択します
  • [追加]ボタンを使用してライブラリを選択し、プロジェクトに追加します
3
anon