如何编译来自两个独立源树中#include的头文件的C源文件?每个源树都有自己的一组makefile,源树完全相互独立。
我正在编写一个Wireshark插件,用于解释特定网络协议的数据包。为了编译插件,编译器需要针对Wireshark源树解析符号。但是,为了使插件在Wireshark为其提供字节数组时实际解释网络数据包内容,插件还必须包含来自完全独立的源树的数据结构和RPC XDR例程的定义。因此编译器还需要针对Wireshark和包含这些文件的完全独立的源树解析符号。
有一种简单的方法吗?任何建议都会非常感激。
答案 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文件。