Bunu LD_LIBRARY_PATH is evil biliyorum ve bunu kullanmaktan kaçınmak için iyi bir alışkanlıktır. Ben openssl kütüphanesinden (0.9.8 ve 1.0.0) ve gcc 3.4.6 kullanıyorum iki sürümü tutan bir uzak Solaris 9 sunucuda server.c
adlı bir program var. Programımın 1.0.0a sürümüne bağlanması gerekiyor. o iş ortamı Çünkü, ben openssl kütüphanesi dizinde herhangi bir şey değiştirme hakkını yok. Ben LD_LIBRARY_PATH
ayarlamadan hem -L
ve -R
seçenekleriyle programımı derlemek anladım ve iyi çalıştı. (-R
seçeneğini ayarlamadan çalışmayacağını fark ettim) Ancak derlenmiş program /.../libssl.so.1.0.0
yerine /usr/local/ssl/lib/libssl.so.0.9.8
'a bağlanmayı sürdürdü. Bunun için bir iş var mı? Yanılıyorsamnasıl LD_LIBRARY_PATH kullanmadan makefile paylaşılan kütüphanenin belirli bir sürümünü bağlanır?
, düzelt lütfen: Bu -R
seçenek olduğunu aslında "bağlantı" derleme zamanında zamanında paylaşılan kütüphaneler ve -L
seçeneği yalnızca "yük" paylaşımlı kütüphaneler?
Herhangi bir yardım çok takdir edilecektir!
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 için şunu görüyorum: çalışmaz, ancak bir hata üretmeyecek ve yine de bir şeyle bağlantı kurmaya çalışacaktır. – jgmjgm