Как указать версию библиотеки для использования во время ссылки?
Следующий вопрос Как приложения обрабатывают разные версии разделяемых библиотек во время выполнения?, я задался вопросом, как указать в командной строке ссылки, какая версия библиотеки использовать?
Скажем, у меня
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
Компонент также может принимать имена файлов
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