2010-08-02 14 views
9

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?

BTW

, 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 

cevap

15

ben belirli kütüphanenin mutlak yolunu içerebilir anladım deneyebilirsiniz ben bağlamak istediğiniz ve bu benim için iyi çalıştı:

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

Eğer g ++ kullanıyorsanız, Piotr Lesnicki-l:libssl.so.1.0.0 da çalışır dikkat çekti. original post'da daha fazlasını görün.

+1

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

1

SSL lib herhangi bir bağlantısı var mı: İşte ///////

benim Makefile mı? Değilse, ssl dizinde

ln -s libssl.so.1.0.0 libssl.so 

gibi istenen SSL lib bir bağlantı oluşturmak ve

+0

Evet, sembolik bağlantı yapmak için iyi bir yoldur, ancak bazen openssl kütüphanesinin eski sürümüne bağlanmam gerekiyor. Programımı her derlediğimde değiştirebileceğim bir şey istiyorum. Ama teşekkürler, işe yarıyor! –

İlgili konular