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

时间:2010-10-01 14:42:15

标签: linux gcc shared-libraries

在问题How do applications resolve to different versions of shared libraries at run time?之后,我想知道如何在链接命令行上指定要使用哪个版本的库?

假设我有

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的命令行是什么?

1 个答案:

答案 0 :(得分:40)

链接器也能够接受文件名

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

来自man ld

  

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

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

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

gcc  app.o /mylibpath/libmy.so.1 -o app