【问题标题】:Compiling a source file that has dependencies on multiple source code trees编译依赖于多个源代码树的源文件
【发布时间】:2011-07-29 04:08:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: c plugins wireshark wireshark-dissector


    【解决方案1】:

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

    要针对 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

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

    【讨论】:

      【解决方案2】:

      如果你使用的是 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 文件。

      【讨论】:

      • 谢谢!如果我有足够的声望点,我也会 +1 这个答案。
      猜你喜欢
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2017-06-24
      • 2012-07-04
      相关资源
      最近更新 更多