如何让libtool指向用户安装的库?

时间:2011-12-17 04:06:54

标签: makefile gem libtool

我正在尝试安装一个rubygem,它继续尝试读取一个不可用的库。

grep: /usr/lib64/libgdbm.la: No such file or directory /bin/sed: can't read /usr/lib64/libgdbm.la: No such file or directory libtool: link: /usr/lib64/libgdbm.la' is not a valid libtool archive

为了解决这个问题,我安装了自己的libgdbm并在makefile LDFLAGs中提供了libgdbm的路径,但无济于事。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这个rubygem似乎做了一些脏东西,因为任何干净的库搜索(-L或pkg-config)都会产生类似“库/包gdbm未找到”的消息。特别是la文件中的grep-and-sed过程看起来很脏。确保圣诞老人知道这个宝石的作者今年没有礼物。

gem可能具有硬编码的libtool存档的路径。首先,尝试在gem的/usr/lib64/libgdbm.la中grep Makefile。更改硬编码路径,并确保安装脚本对任何系统目录都没有写入权限,因为它似乎与sed s一起运行。

答案 1 :(得分:1)

Libtool需要熟悉您的编译器套件和操作系统,以便能够创建共享库并正确链接它们。安装libtool发行版时,系统特定的libtool脚本将安装到二进制目录中。 但是,当您使用自己的软件包分发libtool时,您并不总是知道用于编译软件包的编译器套件和操作系统。

因此,必须先配置libtool才能使用它。任何使用过GNU配置脚本的人都应该熟悉这个想法。 configure为系统功能运行许多测试,然后生成Makefile(可能还有config.h头文件),之后你可以运行make并构建包。

Libtool将自己的测试添加到配置脚本中,以便为安装程序的主机生成libtool脚本。为此,您可以在configure.ac中使用LT_INIT宏。

简而言之,如果你的包有配置文件,请在运行Make

之前运行它
make distclean //clean up all the previous generated files
autoconf //or autoreconf to generate configure script from configure.ac and configure.in
automake //to generate new Makefile.in from Makefile.ac
./configure //to generate new Makefile and libtool