2010-08-02 14 views
9

मुझे पता है कि LD_LIBRARY_PATH is evil और इसका उपयोग करने से बचने के लिए यह एक अच्छी आदत है। मेरे पास एक दूरस्थ Solaris 9 सर्वर पर server.c नामक प्रोग्राम है जिसमें openssl लाइब्रेरी (0.9.8 और 1.0.0) के दो संस्करण हैं और मैं gcc 3.4.6 का उपयोग कर रहा हूं। मेरे कार्यक्रम को 1.0.0 ए संस्करण से लिंक करने की आवश्यकता है। क्योंकि यह कार्य वातावरण है, मुझे openssl लाइब्रेरी निर्देशिका में कुछ भी संशोधित करने का अधिकार नहीं है। मैंने सेट किए बिना -L और -R विकल्पों के साथ अपने प्रोग्राम को संकलित करने के लिए अनुमान लगाया और यह ठीक काम किया। (मैंने देखा है कि यह -R विकल्प सेट किए बिना काम नहीं करेगा) लेकिन संकलित प्रोग्राम के बजाय /usr/local/ssl/lib/libssl.so.0.9.8 से लिंक रखता है। क्या इसके आसपास कोई कार्य है?LD_LIBRARY_PATH का उपयोग किये बिना मेकफ़ाइल में साझा लाइब्रेरी के किसी विशिष्ट संस्करण को कैसे लिंक करें?

Btw, कृपया मुझे ठीक कर लें मैं गलत हूँ: यह -R विकल्प है कि वास्तव में "लिंक" संकलन समय पर रनटाइम पर साझा पुस्तकालयों और -L विकल्प केवल "लोड" साझा पुस्तकालयों?

किसी भी मदद की बहुत सराहना की जाएगी!

Z.Zen

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

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 

उत्तर

15

मैं पता लगा है कि मैं विशिष्ट पुस्तकालय की निरपेक्ष पथ शामिल कर सकते हैं की कोशिश कर सकते हैं कि मैं लिंक करना चाहते हैं और यह मेरे लिए ठीक काम किया:

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

आप जी ++ का उपयोग कर रहे हैं, तो Piotr Lesnicki ने बताया कि -l:libssl.so.1.0.0 भी काम करता है। original post पर और देखें।

+1

मुझे लगता है कि gcc -l के लिए: काम नहीं करता है, लेकिन यह एक त्रुटि उत्पन्न नहीं करेगा और फिर भी किसी चीज़ से लिंक करने का प्रयास करता है। – jgmjgm

1

आप SSL lib के लिए कोई लिंक है: ///////

यहाँ मेरी Makefile है? यदि नहीं, तो आप ssl निर्देशिका में तरह

ln -s libssl.so.1.0.0 libssl.so 

वांछित एसएसएल lib के लिए एक लिंक बना सकते हैं और यह

+0

हाँ, सिम्लिंक इसे करने का एक अच्छा तरीका है लेकिन कभी-कभी मुझे openssl लाइब्रेरी के पुराने संस्करण से लिंक करने की आवश्यकता होती है। मुझे ऐसा कुछ चाहिए जो हर बार जब मैं अपना प्रोग्राम संकलित करता हूं तो मैं बदल सकता हूं। लेकिन धन्यवाद, यह काम करता है! –

संबंधित मुद्दे

 संबंधित मुद्दे