2011-07-28 44 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这个答案。 –

相关问题