7

C++ プロジェクトで非標準ライブラリを使用する方法を理解しようとしています。いくつかの質問を聞きたいんです。

POCO ライブラリを使いたいとしましょう。そこで、ダウンロードして make を使ってビルド (静的ビルド) しました。今、たくさんの .o ファイルと .h ファイルがあります。別のディレクトリに Path.h ファイルと Path.o ファイルがあります。

今、私は自分のコードでこのモジュールを使用したいと考えています。#include "Poco/Path.h" を使用してファイルをインクルードします。makefile を変更して Path.o をターゲットに追加する必要がありますか?

標準ライブラリを使用するとどうなりますか? それらはヘッダーファイルでのみ利用できますか? テンプレート コードをプリコンパイルできないことはわかっています。残りはどうですか?

4

2 に答える 2

9

libXXX.a.h および .o ファイルのほかに、おそらく 1 つまたは複数のand/orファイルもあるでしょうlibXXX.so。これらは、アプリケーションがリンクする実際のライブラリ ファイルです。

ライブラリを使用するには、ソース ファイルに関連するヘッダーを含め、makefile を変更して、アプリケーションも XXX ライブラリにリンクする必要があることをリンカーに伝えます。そのための典型的なリンカコマンドは で-lXXXあり、リンカは libXXX.a と libXXX.so の両方を探し、最も適切と思われる方を使用します。

標準ライブラリは、リンカーに明示的に指定する必要がないことを除いて、外部ライブラリと実際には違いはありません。

于 2010-10-25T13:59:19.017 に答える
8

あなたの質問は、あなたがすでにあなた自身のコードのためのmakefileを持っていることを暗示しているようです。その場合は、はい、そのmakefileで実行可能ファイルのルールを変更する必要があります。Bart van Ingen Schenauが指摘しているように、POCO makefileはおそらくオブジェクトファイルをなどのライブラリにアセンブルしたPoco/Libraries/libPoco.aので、必要なオブジェクトファイルを選択するのではなく、それらを使用する必要があります。たとえば、今の場合、ルールは次のようになります。

foo: foo.o bar.o
    g++ -lSomeLibrary $^ -o $@

次のように変更する必要があります

foo: foo.o bar.o
    g++ -lSomeLibrary -LPoco/Libraries -lPoco $^ -o $@

(あなたの質問の2番目の部分、「何が起こるか...残りはどうですか?」は私にはわかりません。)

注:するのは悪い考え#include "Poco/Path.h"です。これにより、コードはディレクトリ構造に依存するようになりますが、これは気にする必要はありません。コンパイラにそれ#include "Path.h"を見つける場所を教えてくださいg++ -c -IPoco ...

于 2010-10-25T14:31:59.777 に答える