3
gcc (GCC) 4.8.1
Fedora 19 Linux localhost.localdomain 3.11.4-201.fc19.x86_64 #1 SMP Thu Oct 10 14:11:18 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
cmake version 2.8.11

我正在使用 cmake 创建一个共享库,该库动态链接一些系统库 uuid、asound、crypto 和 ssl。

我已将编译器和链接器标志设置为使用 32 位模式进行编译:

set_target_properties(app_module_sip PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

当我编译时,我得到了这些库的以下链接错误(只包括 uuid 而不是其他的以保持简短)。

/usr/bin/ld: cannot find -luuid

所以我在这些库上做了一个定位,看看它们是否存在

/usr/lib/libuuid.so.1
/usr/lib/libuuid.so.1.3.0
/usr/lib64/libuuid.so.1
/usr/lib64/libuuid.so.1.3.0

因此,由于 libuuid.so 不存在,我猜这就是它正在寻找的东西。我决定创建一个软链接:

ln -s libuuid.so.1 libuuid.so

所以现在我得到以下信息:

lrwxrwxrwx. 1 root root    12 Oct 23 14:00 libuuid.so -> libuuid.so.1
lrwxrwxrwx. 1 root root    16 Sep 18 22:04 libuuid.so.1 -> libuuid.so.1.3.0
-rwxr-xr-x. 1 root root 20772 Sep 10 16:34 libuuid.so.1.3.0

现在,当我进行定位时,我得到了这个:

/usr/lib/libuuid.so
/usr/lib/libuuid.so.1
/usr/lib/libuuid.so.1.3.0

在为每个库创建软链接之后,一切都可以编译和链接。

问题

1) 我不是 Linux 专家,但为系统库创建软链接是否安全?会不会对其他地方产生影响?

2)为什么库有不同的版本号也必须有软链接?libuuid.so.1.3.0、libuuid.so.1 等。

4

2 回答 2

3

安装 libuuid-devel 会处理它。

$ yum install libuuid-devel
于 2018-04-23T22:20:26.170 回答
1

1)安全。软链接只是指向库的链接。删除软链接不会对原库产生影响。但是某些应用程序可能找不到它所依赖的库。例如,它依赖于libuuid.so而不是libuuid.so.1. 如果删除软链接libuuid.so -> libuuid.so.1,链接器会抱怨。

2)共享库将以这种方式命名:lib[name].so.[major].[minor]. 更新共享库时,如果仅更改了次要版本号,例如,libuuid.so.1.3.0 --> libuuid.so.1.3.1libuuid.so.1.3.1替换libuuid.so.1.3.0,软链接将更改为libuuild.so.1 -> libuuild.so.1.3.1。主要版本也在变化。这样,我们就可以轻松管理共享库的版本。

于 2013-11-21T09:23:40.620 回答