【发布时间】:2011-03-24 00:43:03
【问题描述】:
我知道LD_LIBRARY_PATH is evil,避免使用它是一个好习惯。
我在远程 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 选项仅在编译时“加载”共享库吗?
任何帮助将不胜感激!
禅宗
/////////////////////////////////////////////////// /p>
这是我的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
【问题讨论】:
标签: c gcc openssl shared-libraries