web-dev-qa-db-ja.com

g ++で静的ライブラリを作成する方法は?

.cppファイルと.hppファイルから静的ライブラリを作成する方法を教えてください。 .oと.aを作成する必要がありますか?また、静的ライブラリを他の.cppコードでコンパイルして使用する方法を知りたいと思います。 header.cppheader.hpp .を作成しますheader.aを作成します。 test.cppでheader.aをテストします。コンパイルにg ++を使用しています。

88
linuxx

.oファイルを作成します。

g++ -c header.cpp

このファイルをライブラリに追加し、必要に応じてライブラリを作成します。

ar rvs header.a header.o

ライブラリを使用:

g++ main.cpp header.a
94

次のように、arユーティリティを使用して.aファイルを作成できます。

ar crf lib/libHeader.a header.o

libは、すべてのライブラリを含むディレクトリです。このようにコードを整理し、コードとオブジェクトファイルを分離することをお勧めします。通常、すべてを1つのディレクトリに入れると見苦しくなります。上記の行は、ディレクトリliblibHeader.aを作成します。したがって、現在のディレクトリで次の操作を行います。

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 
35
Sriram

.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

それでも、実際のユースケースはもう少し複雑で、より多くのモジュールがあるという疑念のメリットを提供します。

お役に立てれば!