0

我正在维护一个构建“前端”库和多个“后端”库的库项目。该项目使用了包括 Libtool 在内的 Autotools 套件(我正在学习并发现我们的项目的实现需要维护)。作为共享库,这一切都很好。我们有一个使用该库的应用程序开发人员,并且更喜欢使用静态库构建,以便在多个平台上轻松分发软件(我不想讨论他的动机)。

他告诉我,之前他能够使用我们的构建系统构建一个大型静态库,但现在不能了。我无法准确追踪何时发生这种情况,但怀疑它可能与两个更改之一有关。第一个更改是删除捆绑的 libtool 源目录。第二个是将后端库放在 /usr/local/lib/project 中,而不是像以前一样将它们分散在 /usr/local/lib (默认位置)中。

我一直无法学习的是如何将前端库与后端组合到 /usr/local/lib 下的单个便利库中,并在 Autotools 框架中这样做。这似乎是可能的,但我还没有找到一个可以学习的例子。

顺便说一句,这些项目构建了几个实用程序作为我们测试套件的一部分。我使用 --disable-shared 选项运行配置,然后运行,实用程序静态链接到项目库。现在我的任务是让第三方应用程序可以使用这个功能。

4

1 回答 1

3

在 Libtool 的行话中,便利库是未安装的库。它必须用noinst_前缀声明为 Automake。

当您从多个便利库中构建一个库 L 时:所有便利库都聚集在一起构建一个将被安装的库 L。无论 L 是共享库还是静态库,都会发生这种情况。

我的猜测是你有第三个变化:也许在过去你所有的后端库都是便利(即noinst_)库,所以你最终只安装了一个.so和一个.a;然而在某个时候,决定自行安装所有这些后端库(即,更改noinst_pkglib_或类似的),因此这些库不再是便利库,它们不再包含在前端中。

请注意,如果已安装的后端库仍列为_LIBADD前端库,则此依赖项仍由 Libtool 记录。每当您链接到已安装的frontend.la文件时(这需要您使用libtool链接,即使作为库的用户),Libtool 也应该包含后端库,无论frontend.la是编译为静态库还是共享库。

PS:如果您的后端库实际上是前端 dlopened 的 Libtool 模块(又名插件),则问题会略有不同。

于 2011-12-08T07:58:51.510 回答