GCC связывается с именем компоновщика общего объекта

Предположим, у меня есть:

  • /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 или чего-то еще. Я хочу, чтобы он связался с общим объектом во время компиляции.

Возможно ли это вообще?

7
задан uvsmtid 12 March 2013 в 18:12
поделиться