如何指定链接时使用的库版本?
下面的问题应用程序在运行时如何parsing不同版本的共享库? ,我想知道如何在链接命令行上指定要使用哪个版本的库?
假设我有
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
链接应该使用库的版本1的app
的命令行是什么?
链接器也能够接受文件名
gcc app.o -l:libmy.so.1 -o app
从man ld
:
-l namespec
–library = namespec
将由namespec指定的归档文件或目标文件添加到要链接的文件列表中。 这个选项可以使用任意次数。 如果namespec的格式为:filename,则ld将search名为filename的文件库path ,否则将search名为libnamespec.a的文件的库path。
我注意到旧版本不支持它,所以请检查系统上的man ld
-l
或--library
选项。
您也可以链接到提及其全名的文件
gcc app.o /mylibpath/libmy.so.1 -o app