Подтвердить что ты не робот

Как указать версию библиотеки для использования во время ссылки?

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

Скажем, у меня

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 библиотеки?

4b9b3361

Ответ 1

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

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

От man ld:

-l namespec
- библиотека = namespec
           Добавьте файл архива или объекта, указанный спецификацией, в список файлов для ссылки. Эта опция может использоваться любое количество раз. Если            namespec имеет вид: filename, ld будет искать путь к библиотеке для файла с именем filename, иначе он будет искать библиотеку            путь к файлу libnamespec.a.

Я заметил, что более старые версии не поддерживают его, поэтому установите флажок man ld -l или --library в вашей системе.

Вы также можете ссылаться на файл с указанием его полного имени

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