Я знаю, что 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