динамическое связывание: изменение пути связывания - PullRequest
0 голосов
/ 29 марта 2010

Обычно бывает, что когда-либо путь к библиотеке, которая должна быть динамически связана, определяется в LD_LIBRARY_PATH, или это будет упоминаться с флагом -L при создании двоичного файла.

В реальном сценарии if, скажем, двоичный файл был собран и развернут на клиентском месте. Теперь, если есть изменение в пути одного из пути к динамической библиотеке. затем нам нужно предоставить новый файл make всем клиентам, на которых был развернут бинарный файл.

существует ли какой-либо другой метод, в котором нам не нужно указывать всем клиентам об изменении их make-файлов, и можно ли что-то сделать в самом коде? если да ... кто-нибудь может подсказать как?

По иронии судьбы мне задавали этот вопрос, и у меня не было ответа на него.

РЕДАКТИРОВАТЬ: : Меня специально спросили о том, что можно сделать в коде, не касаясь make-файла.

Ответы [ 3 ]

1 голос
/ 29 марта 2010

Обычно вам следует изменить только LD_LIBRARY_PATH, если только это не связано с компиляцией с жестко заданным путем поиска: rpath .

0 голосов
/ 29 марта 2010

Может быть, интервьюеры хотели узнать о dlopen и dlsym? http://linux.die.net/man/3/dlsym

0 голосов
/ 29 марта 2010

Используйте переменную окружения, такую ​​как MYLIBPATH, и используйте эту переменную в вашем make-файле, а не в жестко запрограммированном значении.

Таким образом, каждый клиент может иметь собственную структуру каталогов, и, если они правильно указывают MYLIBPATH, ваша программа собирается нормально.

В качестве альтернативы вы можете искать библиотеку в вашем make-файле, например:

LIBPATH = $(shell find / -name libmylib.a -exec dirname {} ";" -quit)

myprog: myprog.c
        $(CC) myprog.c -lmylib -L$(LIBPATH)

РЕДАКТИРОВАТЬ: locate заменен на find, который возвращает только первое совпадение с -quit опция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...