如何在没有安装的情况下使用正确的库路径重新链接libtool构建的可执行文件?

时间:2012-07-24 09:22:21

标签: makefile gnu-make autotools libtool ldd

A使用GNU autotools进行项目构建。现在我进行了一些微小的更改,只想从整个集合中复制一个单独的库 libmylib.so一个程序 myprog.x(使用该库)

我不想使用make install,因为我必须非常小心,不要覆盖所有其他内容。

当我这样做时

ldd .libs/myprog.x

我看到使用的库是 - 按预期 - 是新建的库而不是/usr/lib/中的库。

$ ldd .libs/myprog.x
libmylib.so.0 => /home/user/project/.libs/libmylib.so.0 (0x003bb000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00f57000)
libc.so.6 => /lib/tls/libc.so.6 (0x00948000)
libz.so.1 => /usr/lib/libz.so.1 (0x0024e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00ee7000)

如何告诉makelibtool 重新链接 myprog.x,以便我可以手动将其复制到/usr/bin/?当然,将libmylib.so复制到/usr/lib/

1 个答案:

答案 0 :(得分:1)

(我通过运行make -n install | less来解决这个问题。)

您可能希望使用libtool安装库和程序(如果它使用libtool链接),请尝试类似:

sudo ./libtool --mode=install /usr/bin/install -c libmylib.la /usr/lib
sudo ./libtool --mode=install /usr/bin/install -c myprog.x /usr/bin

Libtool可能会要求您运行./libtool --mode=finish命令。我相信它的建议。在执行任何此操作之前,我将使用--dry-run选项运行命令,而不使用sudo来查看将要发生的具体操作。

请注意,我没有运行系统libtool,而是运行configure脚本创建的系统。