5

私はC++で進化シミュレーターを構築していますが、「実際の」実行可能なプログラムとしてではなく、他のプログラムがすべきクラスとして構築してい#includeます。と呼ばれるこのクラスには、、、などのWorld機能があります。update()getInfo()

ここで2つの問題に直面しています。まず、クラスを正確にコンパイルする方法と、ユーザー プログラム (クラスのファイル) にどのファイルを提供する必要があるかがわかりません#include。明らかに、プログラムは.hppファイルを受信する必要がありますが、他に何がありますか? クラスのオブジェクトファイルWorld?これは、構文を使用してユーザー プログラムをコンパイルする必要があることを意味しg++ World.o user.o -o userますが、それを回避する方法はありWorld.oますか (コンパイル コマンドで言及しています)。iostream.o同じように、コンパイル コマンドに含める必要はありません。

2 番目の問題は、Worldクラス#includeが などの他のクラスであり、そのクラスから継承するためにクラスOrganismをインクルードする必要があることです。Block単一のWorld.oファイルを取得するためにこのコードをコンパイルするにはどうすればよいですか (それが問題 1 の答えである場合)。

4

3 に答える 3

3

私には、クラスからライブラリを作成したいように思えますWorld。ライブラリは通常、実行可能ファイルまたは他のライブラリにリンク/使用される一連の型、関数、または変数を提供します。

ライブラリは通常、パブリックインターフェイス残り(内部、実装の詳細) で構成されます。前者はライブラリ ヘッダー ファイルに入り、はしごは他のヘッダーまたは実装ファイルに入ります。

インターフェイス定義には、ライブラリの潜在的なユーザーが作業する必要があるすべてが含まれています。それ以上でもそれ以下でもありません。あれは、

  • public 型、関数、および変数の宣言
  • ライブラリを操作するために必要な typedef
  • ドキュメンテーション
  • ...

ユーザーが と対話する必要があるだけで と対話する必要がある場合WorldOrganismこのクラスはライブラリ ヘッダーには入りませんが、たとえば、関連する実装ファイルにのみ含まれます。実装自体は、異なるファイルに分割される場合があります。これらを適切に組み合わせるのはリンカー次第です。


多くのファイルやライブラリが関係している場合、ビルド構成を手動で定義するのは非常に面倒です。良いことに、これを自動的に生成するツールがあります。たとえばcmake。cmake 構成ファイルの例は次のようになります。

# CMakeLists.txt

# add a shared library to build configuration
add_library(my_library_name SHARED my_library_file1.cpp my_library_file2.cpp)

# add an executable to build configuration
add_executable(my_executable_name executable_file1.cpp executable_file2.cpp)

# link the library to the executable
target_link_libraries(my_executable_name my_library_name)

cmakeが配置されているディレクトリへのパスを指定して実行し、CMakeLists.txt必要なメイクファイルをビルドしてから を実行するmakeだけで完了です。


以下も参照してください。

于 2012-09-18T18:42:08.457 に答える
1

コードのユーザーが使用するために必要な一連のヘッダー ファイルが必要です。それ以外はすべて、使用するためにライブラリにコンパイルして、一連のヘッダーをコードに含め、ライブラリにリンクする必要があります。

于 2012-09-18T17:47:57.467 に答える
1

静的または共有ライブラリを作成できます。http://www.adp-gmbh.ch/cpp/gcc/create_lib.html

于 2012-09-18T17:49:48.353 に答える