Предположим, у меня есть:
/usr/lib/libsomething.so.1
на машине A; /usr/lib/libsomething.so.2
на машине B. Обе машины имеют /usr/lib/libsomething.so
символическую ссылку на их соответствующие библиотеки.
Если я свяжу с помощью gcc
с -lsomething
(или даже /usr/lib/libsomething.so
) он будет следовать символической ссылке, а ldd
на машине A выдаст что-то вроде:
libsomething.so.1 => /usr/lib/libsomething.so.1
Это означает, что он выиграл » не смогу найти библиотеку на машине B.
Теперь я знаю, что это основные изменения номера версии, и я знаю, что они могут быть несовместимы, но я готов пойти на этот риск. Что я' Я хочу сказать, что компоновщик должен искать libsomething.so
и не переходить по символической ссылке, поэтому ldd
покажет
libsomething.so => /usr/lib/libsomething.so.1
на A, но
libsomething.so => /usr/lib/libsomething.so.2
на B. тогда загрузчик будет следовать символической ссылке на любую имеющуюся версию.
Кроме того, мне не нужна отложенная загрузка с помощью dlopen или чего-то еще. Я хочу, чтобы он связался с общим объектом во время компиляции.
Возможно ли это вообще?