Как связать определенную версию общей библиотеки в make-файле без использования LD_LIBRARY_PATH? - PullRequest
9 голосов
/ 02 августа 2010

Я знаю, что LD_LIBRARY_PATH - зло , и это хорошая привычка избегать его использования. У меня есть программа с именем server.c на удаленном сервере Solaris 9, которая содержит две версии библиотеки openssl (0.9.8 и 1.0.0), и я использую gcc 3.4.6. Моя программа должна ссылаться на версию 1.0.0a. Поскольку это рабочая среда, я не имею права что-либо изменять в каталоге библиотеки openssl. Я решил скомпилировать мою программу с параметрами -L и -R без установки LD_LIBRARY_PATH, и она работала нормально. (Я заметил, что это не будет работать без установки опции -R) Но скомпилированная программа продолжала ссылаться на /usr/local/ssl/lib/libssl.so.0.9.8 вместо /.../libssl.so.1.0.0. Есть ли обходной путь для этого?

Кстати, поправьте меня, если я ошибаюсь: опция -R действительно "связывает" совместно используемые библиотеки во время выполнения, а опция -L только "загружает" совместно используемые библиотеки во время компиляции?

Любая помощь будет высоко ценится!

Z.Zen

//////////////////////////////////////////////

Вот мой Makefile :

CC = gcc
OPENSSLDIR = /usr/local/ssl
CFLAGS = -g -Wall -W -I${OPENSSLDIR}/include -O2 -D_REENTRANT -D__EXTENSIONS__ 

RPATH = -R${OPENSSLDIR}/lib
LD = ${RPATH} -L${OPENSSLDIR}/lib -lssl -lcrypto -lsocket -lnsl -lpthread

OBJS = common.o

PROGS = server

all: ${PROGS}

server: server.o ${OBJS}
        ${CC} server.o ${OBJS} -o server ${LD}


clean:;
        ${RM} ${PROGS} *.ln *.BAK *.bak *.o

Ответы [ 2 ]

16 голосов
/ 03 августа 2010

Я понял, что могу указать абсолютный путь к конкретной библиотеке, на которую я хочу сослаться, и у меня все заработало:

LD = ${RPATH} -lsocket -lnsl -lpthread ${OPENSSLDIR}/lib/libssl.so.1.0.0 \
         ${OPENSSLDIR}/lib/libcrypto.so.1.0.0

Если вы используете g ++ , Петр Лесницкий указал, что -l:libssl.so.1.0.0 также работает. См. Больше в оригинальном сообщении .

1 голос
/ 02 августа 2010

Есть ли у вас ссылки на SSL lib? Если нет, можете ли вы создать ссылку на желаемую библиотеку SSL, например

ln -s libssl.so.1.0.0 libssl.so 

в каталоге ssl и попробуйте

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