1

私はLib_file.hとLib_file.cppにいくつかのコードを書きました。このコードを静的ライブラリに変換したいと思います。(コマンドを使用して)コードをコンパイルしてg++ -I <necessary include files> -o Lib_file.o Lib_file.cppLib_file.oを取得できます。コマンドを使用してアーカイブに追加することもできar rvs Lib_file.a Lib_file.oます。-Lオプションを使用して他のコードでこのライブラリを使用しようとすると、未定義の参照エラーが発生します。このエラーは、私のLib_file.oのコードを示しています。だから私の質問は、Lib_file.cppのコードを取得して、それが使用するライブラリにリンクする方法です。

私はこれまでに次のオプションを試しました

I. Lib_file.oを作成した後、次のコマンドを試しました g++ -L<include path> -l<.a files> Lib_file.o。このコマンドを実行すると、次のエラーが発生します

/usr/lib/../lib64/crt1.o:関数 `_start'内:
init.c:(。text + 0x20):「メイン」への未定義の参照
collect2:ldが1つの終了ステータスを返しました

II。arコマンドを使用して、必要なすべての.aファイルをLib_file.oとともに新しいアーカイブに含めようとしました。それでも、アプリケーションでLib_file.aライブラリを使用しようとすると、未定義の参照エラーが発生します

ここで私を助けてください

4

1 に答える 1

4

まず、すべてのライブラリには通常、ライブラリの名前がlibxyz.aどこにxyzあるかなどの名前が付けられます。

次に、ライブラリに使用したオブジェクトファイルのみを使用してプログラムを作成し、それをそれ自体にリンクしようとします。mainライブラリには通常のプログラムに必要な機能がないため、これはもちろん機能しません。別のプログラムを作成し、そのプログラムをライブラリにリンクする必要があります。

好き

gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz

上記のコマンドラインでわかるように、ライブラリをコマンドラインの最後に配置しました。リンカは逆の順序で依存関係を探すため、これが必要です。

編集:静的ライブラリを他のライブラリとリンクする:あなたはしません。静的ライブラリは完全にスタンドアロンであり、他のライブラリ自体が機能する必要がある場合は、実際のプログラムをコンパイルするときにコマンドラインに存在する必要があります。

たとえば、ライブラリxyzが標準の数学ライブラリ(つまりライブラリ)に依存しているとしますm静的ライブラリを実際にリンクxyzしないため、ライブラリを作成するときに「リンク」することはできません。オブジェクトファイルのコレクションをアーカイブにまとめるだけです(拡張子はアーカイブ用です)。ライブラリを必要とする実際のアプリケーションを構築するときは、必要なライブラリとリンクする必要もあります。ar.axyzxyz

gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz -lm
于 2012-09-02T11:41:28.693 に答える