3

ここで、ある人が「C ++で独自のライブラリを作成する方法は?」と尋ねます。これはまさに私が持っている質問です。この質問に対する答えがあります:

  1. 「mylibrary.h」および「mylibrary.cpp」ファイルを作成します。
  2. ライブラリをコンパイルするだけで、「main()」関数を含めることはできません。このステップでは、「myfile.o」というオブジェクトファイルが生成されます。
  3. 「main.cpp」のような別のファイルを作成します。main.cppでは、「mylibrary.h」を#includeする必要があります。
  4. main.cppをコンパイルし、ステップ2のライブラリを追加してリンクインします(この場合は「myfile.o」)。このライブラリを追加しないと、「リンカーエラー-関数定義が見つかりません」などのエラーメッセージが表示されます。

しかし、私はまだいくつかの質問があります:

  1. Library.cppにはmain()関数が必要です。しかし、この主な機能には何が必要ですか?プログラムの起動時に、ライブラリでデフォルトで何かを実行したくありません。明示的に呼び出された場合にのみ実行される一連の関数を含める必要があります。
  2. ステップ4では、「main.cppをコンパイルし、ステップ2からライブラリを追加する」必要があると書かれていますが、ステップ2でライブラリをコンパイル済みです。もう一度コンパイルする必要がありますか?
  3. 「この場合は「myfile.o」」とはどういう意味ですか?この場合、「myfile.o」を正確に処理するにはどうすればよいですか?
  4. ステップ4には、「このライブラリを追加しないと、エラーメッセージが表示されます」と書かれています。しかし、「ライブラリを追加する」とはどういう意味ですか?ステップ3#include "mylibrary.h"でmain.cppに入れたので、ライブラリを追加しましたか?または、ライブラリを追加するためにさらに何かをする必要がありますか?

答えを理解するのを手伝ってくれませんか。


追加:、、、、またはファイルを生成する.aにはEclipseを使用する必要があると思いますか?誰かが私がそれを行う方法と私が正確に何を生成する必要があるかを知っていますか?.lib.so.dll

4

1 に答える 1

2

この例では、階乗関数を提供する「ライブラリ」について考えてみます。簡単にするために、私は無料の関数を使用します。

// factorial.h
int factorial(int input);

// factorial.cpp
#include "factorial.h"

int factorial(int input) {
    if(input > 0) return input * factorial(input - 1);
    else if(input == 0) return 1;
    else return 0;
}

次に、これらのファイルをコンパイルしてを生成しますがfactorial.o、リンクしないでください。(それに応じてEclipseビルドコマンドを設定します。gccを使用する場合は、フラグ-c-oフラグを適切に使用します。これらのフラグの機能を理解するには、コンパイラのドキュメントを参照してください。)

次に、main.cpp(実際には好きな名前を付けることができます)を作成します。

// main.cpp
#include "factorial.h"

int main() {
    // use your library code here to make sure it is usable and working.  
    factorial(3);
    factorial(5); 
    // etc. 
}

次に、これをにコンパイルしてから、これを以前main.oのfromとリンクしてfactorial.o、実行可能ファイルを生成します。実際には中間main.oステップをスキップして、適切なコンパイラオプションを使用してこの両方を1つのステップで実行できます。

于 2013-01-17T10:20:29.720 に答える