一尘不染

如何指定链接时要使用的库版本?

linux

后续问题应用程序在运行时如何解析为共享库的不同版本?,我想知道如何在链接命令行上指定要使用哪个版本的库?

假设我有

libmy.so.1.0
libmy.so.1    -> libmy.so.1.0
libmy.so.2.0
libmy.so.2    -> libmy.so.2.0
libmy.so      -> libmy.so.2

指定库与可执行文件链接的通常方法不会显示要使用的版本。此外,很可能要链接到最新版本。因此,通常的线路在大多数情况下都可以正常工作。

gcc app.o -lmy -o app

app使用该库的版本1 进行链接的命令行是什么?


阅读 617

收藏
2020-06-02

共1个答案

一尘不染

链接器也可以接受文件名

gcc  app.o -l:libmy.so.1 -o app

来自man ld

-l namespec
--library = namespec
将namespec指定的归档文件或目标文件添加到要链接的文件列表中。此选项可以使用多次。
如果namespec的格式为:filename,则ld将在库路径中搜索名为filename的文件
,否则它将在库路径中搜索名为libnamespec.a的文件。

我注意到较旧的版本不支持它,因此请在系统上选中man ld -l--library选项。

您也可以链接到提及文件的全名

gcc  app.o /mylibpath/libmy.so.1 -o app
2020-06-02