Z.Z*_*Zen 9 c gcc openssl shared-libraries
我知道LD_LIBRARY_PATH是邪恶的,避免使用它是一个好习惯.我有一个server.c远程Solaris 9服务器上的程序,它包含两个版本的openssl库(0.9.8和1.0.0),我使用的是gcc 3.4.6.我的程序需要链接到1.0.0a版本.因为它是工作环境,所以我无权修改openssl库目录中的任何内容.我想出用两个-L和-R选项编译我的程序而没有设置LD_LIBRARY_PATH,它工作正常.(我注意到没有设置-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
Run Code Online (Sandbox Code Playgroud)
Z.Z*_*Zen 16
我发现我可以包含我要链接到的特定库的绝对路径,它对我来说很好用:
LD = ${RPATH} -lsocket -lnsl -lpthread ${OPENSSLDIR}/lib/libssl.so.1.0.0 \
${OPENSSLDIR}/lib/libcrypto.so.1.0.0
Run Code Online (Sandbox Code Playgroud)
如果你正在使用g ++,Piotr Lesnicki指出它-l:libssl.so.1.0.0也有效.在原始帖子中查看更多内容.
| 归档时间: |
|
| 查看次数: |
22890 次 |
| 最近记录: |