如何链接到 GCC 中共享库的特定版本
- 2024-11-07 08:55:00
- admin 原创
- 25
问题描述:
我正在 Debian Linux 系统上编译一些使用 libcurl 的代码。我的开发机器运行的是 Debian 5,但我希望二进制文件也能在较旧的 Debian 4 系统上使用。
我发现如果我指定-lcurl它将链接到 libcurl.so.4 但 Debian 4 系统只有 libcurl.so.3
有什么方法可以告诉 GCC 链接到 libcurl.so.3(存在于 Debian 4 和 5 中)或者仅链接到 libcurl.so,以便它将使用可用的任何版本?
解决方案 1:
除了使用-lcurl
,-l:libcurl.so.3
还可以使用-L _installed_path_
解决方案 2:
您可以按照链接器命令行上的约定,使用-l:libfoo.so.1
指定文件名的语法而不是-lfoo
指定库名的语法来传递特定版本的共享库libfoo.so
文件,它应该按照您想要的方式执行,正如在链接器文档部分中看到的选项--library=namespec
。
如果 namespec 的形式为 :filename,ld 将在库路径中搜索名为 filename 的文件
为了通过示例提供有关如何链接到特定版本的更多详细信息,请考虑一个包含同一个库的两个版本的系统,即libfoo.so.1.0
和libfoo.so.2.0
安装在其中一个库目录中,在本例中为/lib
。
$ ls -l /lib/libfoo*
lrwxrwxrwx root root /lib/libfoo.so -> /lib/libfoo.so.2
lrwxrwxrwx root root /lib/libfoo.so.1 -> /lib/libfoo.so.1.1
-rwxr-xr-x root root /lib/libfoo.so.1.0
-rwxr-xr-x root root /lib/libfoo.so.1.1
lrwxrwxrwx root root /lib/libfoo.so.2 -> /lib/libfoo.so.2.2
-rwxr-xr-x root root /lib/libfoo.so.2.0
-rwxr-xr-x root root /lib/libfoo.so.2.1
-rwxr-xr-x root root /lib/libfoo.so.2.2
# ldconfig -p | grep libfoo
libfoo.so.2 (libc6,x86-64) => /lib/libfoo.so.2
libfoo.so.1 (libc6,x86-64) => /lib/libfoo.so.1
libfoo.so (libc6,x86-64) => /lib/libfoo.so
使用该选项编译的程序将使链接器查找依赖于命名约定-lfoo
的文件,从而解析为(对于共享库对象)或(对于静态库对象)。/lib/libfoo.so
`/lib/libfoo.a`
库使用特殊的文件名约定:名为 foo 的库预计以文件 libfoo.so 或 libfoo.a 的形式存在。
与此相反,使用该选项编译的程序-l:libfoo.so.1
将链接到/lib/libfoo.so.1
,即它本身当前是一个符号链接,libfoo.so.1.1
如从上面的列表可以看出,这是 1.0 的一个小更新。
最后,使用该选项编译的程序-l:libfoo.so.2
将链接到/lib/libfoo.so.2
,它本身目前是一个符号链接,libfoo.so.2.2
如上面的列表所示,这是 2.0 和 2.1 的一个小更新。
如果您安装了此类库的较新版本,只要它是小更新,就无需重新编译链接到它的程序,因为兼容版本应该具有相同的soname,并且符号链接应该相应地更新。
实际库 foo 版本 XY 作为文件 libfoo.so.xy 存在,在库文件内部,记录一个 soname,其值为 libfoo.so.x,以表示兼容性。
$ ls -l /lib/libfoo.so.2*
lrwxrwxrwx root root /lib/libfoo.so.2 -> /lib/libfoo.so.2.3
[...]
-rwxr-xr-x root root /lib/libfoo.so.2.3
解决方案 3:
如何创建一个链接到 .3 的项目本地符号链接,然后您可以在编译时使用 -L。我不确定您是否会遇到名称冲突,但为了以防万一,您始终可以将其称为 libcurl-old.so。
解决方案 4:
我认为正确的方法是使用链接器的--filter
和标志。--auxiliary
它们没有很好的文档记录,但应该允许您根据安装的机器从同一个库的不同版本加载符号。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件