代码之家  ›  专栏  ›  技术社区  ›  flyx

如何编译具有静态链接依赖项的autotools项目?

  •  3
  • flyx  · 技术社区  · 14 年前

    我想用一个开源库。由于我想将我的软件作为二进制软件包进行扩展,我不希望库与其他库有依赖关系,因此我需要静态地链接这些依赖关系。

    所以,我需要一种方法,要么告诉configure静态地链接到依赖项,要么对构建的库进行后期处理,以包含所有依赖项。有人能告诉我怎么做吗?

    哦,如果有关系的话:我是64位雪豹。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Malvineous    7 年前

    最近我自己也走上了这条路,我发现不幸的是静态库实际上并不是这样工作的。

    当您生成一个静态可执行二进制文件时,链接器会查看它需要的所有函数,然后查看提供的库列表,并为您需要的每个函数拉入代码。

    当您生成一个静态库时,您不需要进行任何链接,所以所有编译的代码都会被压缩(实际上它使用 ar 但在功能上它和拉链一样)变成 .a 静态库(“a”代表“archive”。)因为没有链接阶段,所以没有检查库使用哪个函数调用的内容。它只是有一堆“未解决的外部问题”,这些问题将在以后得到解决。

    .

    我完全明白为什么您要生成一个包含所有依赖项的库,但是据我所知,它不是这样工作的。这就是为什么会有这样的节目 pkg-config

    最后,确保你检查了你想要链接的任何图书馆的许可证。仅仅因为一个库是开源的,并不意味着你可以链接到它。如果它是一个GPL库,那么通过链接到它,您就同意在GPL下发布您自己的源代码,您可能不想这样做。

        2
  •  3
  •   Nelstaar    12 年前

    如果你得到 您可以尝试在项目的Makefile.am中添加以下内容。

    yourproject_LDADD =  libxxx.a