2011-07-28 42 views
1

如何編譯一個C源文件,該文件包含來自兩個獨立源樹中每一個的#include頭文件?每個源樹都有自己的一組makefile,並且源樹彼此完全獨立。編譯與多個源代碼樹有依賴關係的源文件

我正在寫一個Wireshark插件來解釋特定網絡協議的數據包。爲了編譯插件,編譯器需要根據Wireshark源代碼樹解析符號。但是,爲了讓Wireshark在爲它提供一個字節數組時,插件實際解釋網絡數據包的內容,插件還必須包含來自完全獨立的源代碼樹的數據結構和RPC XDR例程的定義。因此編譯器還需要針對Wireshark和一個完全獨立的包含這些文件的源代碼樹來解析符號。

有沒有簡單的方法來做到這一點?任何建議都將非常感激。

回答

2

確保您不會混淆編譯和鏈接。不是說你是,但只是指出有兩個不同的步驟。

要針對tree1和tree2進行編譯,請使用-I include指令指向gcc。 gcc -c -I/some/include/for/tree1 -I/some/include/for/tree2 input.c -o output.o

要連接兩棵樹,創建.so或.la文件(static或動態庫)。稱他們爲tree1.la tree2.la。把它們放在/路徑/到/樹1 /庫和/路徑/到/ tree2 /庫

然後鏈接

的gcc -o PROG -ltree1 -ltree2 -L /路徑/到/樹1 /庫-L/path/to/tree2/libs

如果樹足夠大,它們應該最終創建目標代碼的靜態或動態庫。然後你只需指向它們的頭文件來編譯並指向它們的庫來鏈接。

+0

謝謝!如果我有足夠的聲望點,我會+1。 –

0

如果你正在使用gcc /克+ +

使用-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中的方法是相似的只是命名不同的是,.dll文件代替的.so和.lib文件而不是.a文件。

+0

謝謝!如果我有足夠的聲望點,我也會+1這個答案。 –

相關問題