回答:
.oファイルを作成します。
g++ -c header.cpp
このファイルをライブラリに追加し、必要に応じてライブラリを作成します。
ar rvs header.a header.o
ライブラリを使用:
g++ main.cpp header.a
a.out
、これは非常に誤解を招くようなフォーマット。そして、なぜあなたはと呼ばれる実行可能ファイルを「決して」作成すべきではないのtest
ですか?
test
システムコマンドであるという事実に関係していると思います。しかし、テストプログラムは通常、システムのbinディレクトリにインストールされ./test
ず、書き込む必要があるため、私にとってもそれほど問題ではありません...
a.out
ファイルはフォーマットで生成されなくなりましたが、名前はレガシーの理由で残っています。(そして、あなたはあなたの問題その適切その後、シェルを使用してのしていることができない場合は、私の現在のディレクトリから実行可能ファイルを実行する方法1人の知っているためtest
であるだけで罰金、あなた限り、実行可能ファイル名のためにしている書き込みだけで簡単なテスト当然の抜粋)。
test
は、後悔するための困難な方法を学んだことであり、私は「完全にシェルを使用することができます」。これは悪い考えであり、「シェルを完全に使用できる」他の多くの人に噛み付いているのを見てきました。
次のように.a
、ar
ユーティリティを使用してファイルを作成できます。
ar crf lib/libHeader.a header.o
lib
すべてのライブラリを含むディレクトリです。この方法でコードを編成し、コードとオブジェクトファイルを分離することをお勧めします。1つのディレクトリにすべてを含めると、一般的に見苦しくなります。上記の行はlibHeader.a
ディレクトリに作成されlib
ます。したがって、現在のディレクトリで次のように実行します。
mkdir lib
次に、上記のar
コマンドを実行します。
すべてのライブラリをリンクするときは、次のように行うことができます。
g++ test.o -L./lib -lHeader -o test
-L
フラグが取得するg++
追加するlib/
パスにディレクトリを。これにより、g++
を探すときに検索するディレクトリがわかりlibHeader
ます。-llibHeader
リンクする特定のライブラリにフラグを立てます。
test.oは次のように作成されます。
g++ -c test.cpp -o test.o
-lHeader
代わりではないでしょう-llibHeader
か?
誰かが.cppと.hppファイルから静的ライブラリを作成する方法を教えてもらえますか?.oと.aを作成する必要がありますか?
はい。
.oを作成します(通常どおり)。
g++ -c header.cpp
アーカイブを作成します。
ar rvs header.a header.o
テスト:
g++ test.cpp header.a -o executable_name
1つのモジュールだけを含むアーカイブを作成するのは少し無意味に見えることに注意してください。簡単に書けます。
g++ test.cpp header.cpp -o executable_name
それでも、実際の使用例はモジュールが多く、少し複雑であるという疑問の恩恵を受けます。
お役に立てれば!
ranlib
、GNUでどちらが単に意味するかがわかりますar s
。