1

2つの独立したソースツリーのそれぞれから#includeのヘッダーファイルを含むCソースファイルをコンパイルするにはどうすればよいですか?各ソースツリーには独自のmakefileのセットがあり、ソースツリーは互いに完全に独立しています。

特定のネットワークプロトコルのパケットを解釈するWiresharkプラグインを書いています。プラグインをコンパイルするには、コンパイラはWiresharkソースツリーに対してシンボルを解決する必要があります。ただし、Wiresharkがバイト配列を提供するときにプラグインがネットワークパケットの内容を実際に解釈するには、プラグインに、完全に別個のソースツリーからのデータ構造とRPCXDRルーチンの定義も含める必要があります。したがって、コンパイラは、Wiresharkとこれらのファイルを含む完全に別個のソースツリーの両方に対してシンボルを解決する必要もあります。

これを行う簡単な方法はありますか?どんな提案でも大歓迎です。

4

2 に答える 2

2

コンパイルとリンクを混同しないようにしてください。あなたがそうだと言っているわけではありませんが、2つの異なるステップがあることを指摘しているだけです.

tree1 および tree2 に対してコンパイルするには、gcc に対して -I include ディレクティブを使用します。gcc -c -I/some/include/for/tree1 -I/some/include/for/tree2 入力.c -o 出力.o

2 つのツリーに対してリンクするには、各ツリーから .so または .la ファイル (静的または動的ライブラリ) を作成します。それらを tree1.la tree2.la と呼びます。それらを /path/to/tree1/libs および /path/to/tree2/libs に入れます

次にリンク

gcc -o prog -ltree1 -ltree2 -L/path/to/tree1/libs -L/path/to/tree2/libs

ツリーが十分に大きい場合、オブジェクト コードの静的ライブラリまたは動的ライブラリを作成することになります。次に、コンパイルするヘッダーをポイントし、リンクするライブラリをポイントするだけです。

于 2011-07-28T20:00:07.880 に答える
0

gcc /g++を使用している場合

-Iフラグを使用して、コンパイルに必要なヘッダーファイルをインクルードします。

例えば:

g++ -I<includepath1> -I<includepath2> ... -c somefile.cpp -o somefile.o

ライブラリに対してリンクするには、-Lフラグを使用します。例えば:

g++ -o pluginname.so somefile.o somefile2.o somefile3.o -L <libpath1> -l<libname1> -L <libpath2> -l <libname2> <fullpath to .a file for statically linking>

Windowsでは、アプローチは似ていますが、命名法が異なり、.soの代わりに.dllファイル、.aファイルの代わりに.libファイルがあります。

于 2011-07-28T19:57:38.027 に答える