Как указать версию библиотеки для использования во время ссылки? - PullRequest
28 голосов
/ 01 октября 2010

Следующий вопрос Как приложения разрешают разные версии общих библиотек во время выполнения? , мне было интересно, как указать в командной строке ссылки, какую версию библиотеки использовать?

Допустим, у меня есть

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 Ответ

40 голосов
/ 01 октября 2010

Компоновщик также может принимать имена файлов

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
...