我知道LD_LIBRARY_PATH is evil,避免使用它是個好習慣。 我有一個程序叫做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
。有沒有解決這個問題的方法?如何在不使用LD_LIBRARY_PATH的情況下鏈接makefile中特定版本的共享庫?
順便說一句,請糾正我,如果我錯了:它是-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
我發現對於gcc -l:不起作用,但它也不會產生錯誤,並且仍然嘗試鏈接到某個東西。 – jgmjgm 2015-11-09 11:14:06