编译依赖于多个源代码树的源文件

时间:2011-07-28 19:11:17

标签: c plugins wireshark wireshark-dissector

如何编译来自两个独立源树中#include的头文件的C源文件?每个源树都有自己的一组makefile,源树完全相互独立。

我正在编写一个Wireshark插件,用于解释特定网络协议的数据包。为了编译插件,编译器需要针对Wireshark源树解析符号。但是,为了使插件在Wireshark为其提供字节数组时实际解释网络数据包内容,插件还必须包含来自完全独立的源树的数据结构和RPC XDR例程的定义。因此编译器还需要针对Wireshark和包含这些文件的完全独立的源树解析符号。

有一种简单的方法吗?任何建议都会非常感激。

2 个答案:

答案 0 :(得分: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文件(静态或动态库)。称他们为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

如果树足够大,它们最终应该创建静态或动态的目标代码库。然后你只需指向他们的头文件进行编译并指向他们的libs进行链接。

答案 1 :(得分: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中,方法类似,只有命名法是不同的.dll文件而不是.so和.lib文件而不是.a文件。