共享的库名称具有链接程序所不希望的版本扩展名?

问题描述 投票:0回答:1

我有一些共享库,大多数相信是通过Red Hat软件包安装的:ncurses,cap,uuid,xml2。

[root@mycomputer~]# rpm -ql libuuid-2.23.2-43.el7_4.2.x86_64
/usr/lib64/libuuid.so.1
/usr/lib64/libuuid.so.1.3.0
/usr/share/doc/libuuid-2.23.2
/usr/share/doc/libuuid-2.23.2/COPYING

> l /usr/lib64/*uuid*
-rwxr-xr-x. 1 root root 20040 Nov  9  2017 /usr/lib64/libuuid.so.1.3.0
lrwxrwxrwx. 1 root root    16 Jul  3  2018 /usr/lib64/libuuid.so.1 -> libuuid.so.1.3.0

供应商的示例程序的makefile在链接行上有-luuid,链接器抱怨:

/usr/bin/ld: cannot find -luuid

我运行strace -f make ... >& makeout以捕获由make及其子代进程进行的所有系统调用。 -f的意思是“也跟随子进程。”]

当我为字符串uuid复制该输出文件时,我看到它从来没有在寻找扩展名为.1的文件。

[pid 21920] open("/opt/nmr/sap/sybaseASE/sybclient-16.0.3-7/OCS-16_0/lib/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/opt/nmr/sap/sybaseASE/sybclient-16.0.3-7/OCS-16_0/lib/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/lib/../lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/lib/../lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/../lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/../lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/x86_64-redhat-linux/lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/x86_64-redhat-linux/lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/local/lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/local/lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/lib64/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/lib64/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/x86_64-redhat-linux/lib/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/x86_64-redhat-linux/lib/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/local/lib/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/local/lib/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/lib/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/lib/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/libuuid.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 21920] open("/usr/lib/libuuid.a", O_RDONLY) = -1 ENOENT (No such file or directory)

[我了解从/usr/lib64/libuuid.so之类的文件(没有.1后缀)到特定版本的软链接的机制,例如,libuuid.so.1.3.0链接器实际上做了一个readlink()以找出libuuid.so指向的最终文件,并将该链接libuuid.so.1.3.0的目标嵌入到二进制文件中。这样,即使将来uuid的“最新”版本也将变成1.4.0,并且将libuuid.so重新指向该新版本,例如,该二进制文件在运行时仍将与1.3.0链接。] >

但是编译器如何从libuuid.so转换为libuuid.so.1

我有一些共享库,大多数相信是通过Red Hat软件包安装的:ncurses,cap,uuid,xml2。 [root @ mycomputer〜]#rpm -ql libuuid-2.23.2-43.el7_4.2.x86_64 /usr/lib64/libuuid.so.1 / usr / lib64 / ...

ld rpm dynamic-linking dynamic-library
1个回答
0
投票
您需要安装包含以下内容的libuuid-devel
© www.soinside.com 2019 - 2024. All rights reserved.