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

假设我有

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是什么?

推荐答案

链接器也可以接受文件名

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

man ld开始:

-l namespec
--library=namespec
Add the archive or object file specified by namespec to the list of files to link. This option may be used any number of times. If namespec is of the form :filename, ld will search the library path for a file called filename, otherwise it will search the library path for a file called libnamespec.a.

我注意到旧版本不支持它,所以请在系统上 Select man ld -l--library选项.

你也可以链接到该文件,提及其全名

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

Linux相关问答推荐

cu可以从串口读取,但我自己的C程序不能

使用 PowerShell 删除重复行所需的时间比 WSL 长得多

如果列小于 X,linux 合并行

从另一个文件中的大文件中查找行的最快方法

未找到 SDL_Vertex 和 SDL_RenderGeometry

如何使用 ftrace 过滤查看函数上方的调用堆栈?

在服务器目录之外启动 DolphinDB 服务器时出错

如何删除文件中不需要的字符(使用 shell 脚本)

sig_atomic_t 实际上是如何工作的?

如何使用 __attribute__((visibility("default")))?

如何使用多个版本的 GCC

用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

grep 时间命令输出

NGINX:connect() 到 unix:/var/run/php7.0-fpm.sock 失败(2:没有这样的文件或目录)

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

bash中变量名后的2个逗号是什么意思?

ldconfig 错误:使用 Linux 加载程序时不是符号链接

我可以使用 awk 将所有小写字母转换为大写吗?

在 reverse-i-search (Ctrl+R ) , 历史上类似命令之间切换的任何方法

为嵌入式 Linux 设备实施更新/升级系统