【问题标题】:How to make libtool point to user installed library?如何使 libtool 指向用户安装的库?
【发布时间】:2011-12-17 04:06:53
【问题描述】:

我正在尝试安装一个 ruby​​gem,它不断尝试读取一个不可用的库。

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 的路径,但无济于事。

非常感谢任何帮助。

【问题讨论】:

    标签: makefile gem libtool


    【解决方案1】:

    这个 ruby​​gem 似乎做了一些肮脏的事情,因为任何干净的库搜索(-L 或 pkg-config)都会导致类似“找不到库/包 gdbm”的消息。尤其是 la 文件上的 grep-and-sed 过程似乎真的很脏。确保圣诞老人知道这颗宝石的作者今年没有收到任何礼物。

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

    【讨论】:

    • 感谢您的回复。我没有这台机器的管理员权限。我查看了 libtool 并且有一个目录列表,看起来像是所需库的搜索路径。但是,我不知道在安装 gem 时如何确保我安装的 gdbm 库最终出现在此处。有什么线索吗?
    【解决方案2】:

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

    因此,必须先配置 libtool,然后才能使用它。任何使用过 GNU 配置脚本的人都应该熟悉这个想法。 configure 运行一系列系统功能测试,然后生成 Makefiles(可能还有 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
    

    【讨论】:

      猜你喜欢
      • 2013-07-10
      • 2010-12-31
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      相关资源
      最近更新 更多