Autotools:是不是可以进行共享库的交叉链接

Posted

技术标签:

【中文标题】Autotools:是不是可以进行共享库的交叉链接【英文标题】:Autotools: Is it possible to do Cross Linking of Shared LibrariesAutotools:是否可以进行共享库的交叉链接 【发布时间】:2013-12-27 19:21:31 【问题描述】:

我可能很愚蠢,但认为可以进行交叉链接:

                               Lib A                            Lib A1
===========   Calling Func A ===========  A calls Func A1   =============
| EXE File |   ===>          |  Func A |   ============>    | Func A1    |
===========                  |  Func B |   A1 calls fun B   =============
                             ===========   <===========     

EXE 和这两个库都在开发中。

如果可以的话怎么办?

【问题讨论】:

【参考方案1】:

编辑:在我研究并发现有关 libtool 手册和反对它的邮件列表的证据后,我决定完全删除我之前的答案。

是的,您可以拥有相互依赖的库。您最终可能只得到静态库(可以有未定义的符号),因为并非所有平台都完全支持对共享库的循环依赖。

Libtool 有一些代码来处理共享库的复杂依赖关系,但它并没有完全移植到所有平台;即使您传入--disable-static --enable-shared,您最终也会得到更保守的实现(静态库)。

【讨论】:

所以,你只想说,首先我编译了其他库的函数只依赖的库,然后编译第二个库,然后再次编译第一个库,并依赖第二个。 确实,我忘记了链接依赖;我进行了更改,因此针对两者的可执行链接,并且明确指示 libtool 在链接时不要尝试解析符号。 我编辑我的答案更合适。似乎最近的 libtool 版本更加保守,我的一个旧项目在 windows 上使用 DLL 执行此操作将不再编译为 DLL。我假设您需要动态库,因为静态库不需要解析符号。

以上是关于Autotools:是不是可以进行共享库的交叉链接的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 GNU Autotools 链接共享库

Autotools 交叉编译和生成源

带有自定义共享库的 Qt 项目交叉编译 Qt

由于 AM_INIT_AUTOMAKE 中的 subdir-objects 选项,Autotools 构建失败

如何使用自动工具构建静态和共享库?

重构构建系统以使用 Autotools