【问题标题】:How to specify the library version to use at link time?如何指定链接时使用的库版本?
【发布时间】:2011-04-19 21:45:20
【问题描述】:

下面的问题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 的库的命令行是什么?

【问题讨论】:

    标签: linux gcc shared-libraries


    【解决方案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
    

    【讨论】:

    • 注意:链接器使用的内容和运行时动态解析的内容(ldd app 将显示的内容)可能不是一回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2011-03-24
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多