为什么Libtool不想与静态库链接?

时间:2012-06-26 10:02:03

标签: build build-automation autotools automake libtool

我想构建一个使用GNU Autotools使用ZipArchive的共享库,但我遇到了这个问题:

Warning: linker path does not have real file for library -lziparch.
I have the capability to make that library automatically link in when
you link to this library.  But I can only do this if you have a
shared version of the library, which you do not appear to have
because I did check the linker path looking for a file starting
with libziparch and none of the candidates passed a file format test
using a file magic. Last file checked: /usr/local/ZipArchive/ZipArchive/libziparch.a
The inter-library dependencies that have been dropped here will be
automatically added whenever a program is linked with this library
or is declared to -dlopen it.

如果我构建一个静态库或者如果我使用ZipArchive的共享库它可以工作,但问题是ZipArchive源代码附带的makefile只构建一个静态库。

如何强制Libtool与静态库链接?

1 个答案:

答案 0 :(得分:4)

通常,静态存档是使用非pic对象文件创建的,不能将它们放入共享库中。

此消息告诉您的是,当程序使用Libtool链接到您的库时,-lziparch将被添加到链接中。因此,除非您正在为解释语言构建模块,否则不需要 来更改任何内容。在这种情况下,您必须将ZipArchive构建为共享库。此外,这不适用于像MS Windows这样的平台,共享库(DLL)必须在链接时解析所有符号。

所有这一切,如果你的ziparch static lib是PIC代码,你可以在将它链接到你的库时使用-whole-archive标志。这可能是最不便携的解决方案。