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

标签 c plugins wireshark wireshark-dissector

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

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

有没有简单的方法来做到这一点?任何建议都将不胜感激。

最佳答案

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

要针对 tree1 和 tree2 进行编译,请对 gcc 使用 -I include 指令。 gcc -c -I/some/include/for/tree1 -I/some/include/for/tree2 输入.c -o 输出.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

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

关于编译依赖于多个源代码树的源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864360/

相关文章:

c - 将指针传递给函数时出现段错误

c - 第二个头文件中第一个头文件的 Typedef 用法

grails - 尝试渲染PDF时出现Grails渲染插件错误?

elasticsearch - Logstash的elasticsearch输出插件会重试单个批量错误吗?

java - 如何在 IntelliJ 中的有效位置根项目?

Wireshark或与其关联的一个已经在运行

c - C语言函数之间的控制权交换

c - 如何手动编译共享dpi lib?

wireshark - 为什么这个 SPDY SYN_STREAM 样本的 header 显然未压缩?

unicode - WireShark - 我可以解码数据包中的 UTF-8 数据吗?