Как связать определенную версию общей библиотеки в make-файле, не используя LD_LIBRARY_PATH?

Я знаю, что LD_LIBRARY_PATH является злым, и это - хорошая привычка избегать использования его. Мне назвали программу server.c на удаленном Солярисе 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. Существует ли обходное решение для этого?

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

Любая справка будет очень цениться!

Z.Zen

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

Вот мой Make-файл:

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

9
задан Bill the Lizard 3 August 2012 в 00:07
поделиться

2 ответа

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

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

Если вы используете g ++ , Piotr Lesnicki указал, что -l: libssl.so.1.0.0 также работает. См. Дополнительную информацию в исходном сообщении .

16
ответ дан 4 December 2019 в 12:15
поделиться

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

ln -s libssl.so.1.0.0 libssl.so 

в каталоге ssl, и попробовать ее

1
ответ дан 4 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: