1

如何从两个独立的源代码树中编译包含#include 头文件的 C 源文件?每个源代码树都有自己的一组 makefile,并且源代码树彼此完全独立。

我正在编写一个 Wireshark 插件,它解释特定网络协议的数据包。为了编译插件,编译器需要根据 Wireshark 源代码树解析符号。然而,为了让插件在 Wireshark 给它一个字节数组时真正解释网络数据包的内容,插件还必须包含来自完全独立的源树的数据结构和 RPC XDR 例程的定义。因此编译器还需要针对 Wireshark 和包含这些文件的完全独立的源代码树来解析符号。

是否有捷径可寻?任何建议都将不胜感激。

4

2 回答 2

2

确保不要将编译与链接混淆。不是说你是,只是指出有两个不同的步骤。

要针对 tree1 和 tree2 进行编译,请使用 gcc 的 -I include 指令。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

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

于 2011-07-28T20:00:07.880 回答
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 文件。

于 2011-07-28T19:57:38.027 回答