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