簡體   English   中英

如何在不使用LD_LIBRARY_PATH的情況下鏈接makefile中特定版本的共享庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM