[英]How to link a specific version of a shared library in makefile without using LD_LIBRARY_PATH?
我知道LD_LIBRARY_PATH是邪惡的,避免使用它是一個好習慣。 我在遠程Solaris 9服務器上有一個名為server.c
的程序,它包含兩個版本的openssl庫(0.9.8和1.0.0),我使用的是gcc 3.4.6。 我的程序需要鏈接到1.0.0a版本。 因為它是工作環境,所以我無權修改openssl庫目錄中的任何內容。 我想在不設置LD_LIBRARY_PATH
情況下用-L
和-R
選項編譯我的程序,它運行正常。 (我注意到沒有設置-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
我發現我可以包含我要鏈接到的特定庫的絕對路徑,它對我來說很好用:
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
也可以。 在原始帖子中查看更多內容。
你有任何SSL lib的鏈接嗎? 如果沒有,您是否可以創建指向所需SSL庫的鏈接
ln -s libssl.so.1.0.0 libssl.so
在ssl目錄中並嘗試它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.