2011-07-28 11 views
1

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

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

これを行う簡単な方法はありますか?どんな提案も非常に高く評価されます。

答えて

2

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

tree1とtree2をコンパイルするには、gccに-I includeディレクティブを使用します。 gcc -c -I/some/include/for/tree1 -I/some/include/for/tree2 input.c -o output.o

2つのツリーをリンクするには、.soまたは.laファイル(staticまたはダイナミックライブラリ)を作成します。それらをtree1.la tree2.laと呼んでください。および/パス/に/樹上村/ libsに

、リンク

のgcc -o progの-ltree1 -ltree2 -L /パス/に/ tree1という/ libsに-Lへ/ tree1という/ libsに/に/パスに置きます/ path/to/tree2/libs

ツリーが十分に大きければ、オブジェクトコードの静的または動的ライブラリを作成する必要があります。次に、ヘッダーをポイントしてコンパイルし、リンクするlibsをポイントします。

+0

ありがとう!十分な評判ポイントがあれば+1します... –

0

あなたはコンパイルするために必要なヘッダファイルをインクルードする

++グラム/ gccの

使用-Iフラグを使用している場合。

例:

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

使用ライブラリをリンクする-Lフラグ。 例:Windowsで

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> 

アプローチは似た唯一の命名法では異なっている、の.soおよび.libファイルの代わりには.aファイルの代わりに.dllファイル。

+0

ありがとうございます!十分な評判ポイントがあればこの回答も+1します。 –

関連する問題