如何在不使用LD_LIBRARY_PATH的情况下在makefile中链接特定版本的共享库?
我知道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
也可以。 在原始post中查看更多内容。
你有SSL lib的链接吗? 如果没有,您是否可以创建指向所需SSL库的链接
ln -s libssl.so.1.0.0 libssl.so
在ssl目录中并尝试它