2010-08-02 26 views
9

Sé que LD_LIBRARY_PATH is evil y es una buena costumbre evitar su uso. Tengo un programa llamado server.c en un servidor remoto de Solaris 9 que contiene dos versiones de la biblioteca de openssl (0.9.8 y 1.0.0) y estoy usando gcc 3.4.6. Mi programa necesita vincular a la versión 1.0.0a. Debido a que es un entorno de trabajo, no tengo derecho a modificar nada en el directorio de la biblioteca openssl. Pensé en compilar mi programa con las opciones -L y -R sin configurar LD_LIBRARY_PATH y funcionó bien. (Noté que no funcionará sin establecer la opción -R) Pero el programa compilado mantuvo el enlace al /usr/local/ssl/lib/libssl.so.0.9.8 en lugar de a /.../libssl.so.1.0.0. ¿Hay una solución para esto?¿Cómo vincular una versión específica de una biblioteca compartida en makefile sin usar LD_LIBRARY_PATH?

BTW, corrígeme si me equivoco: ¿es la opción -R que realmente "vincula" las bibliotecas compartidas en tiempo de ejecución y la opción -L solo "carga" bibliotecas compartidas en tiempo de compilación?

¡Cualquier ayuda será muy apreciada!

Z.Zen

/////////////////////////////////////// ///////

Aquí es mi 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 

Respuesta

15

me di cuenta de que puedo incluir la ruta absoluta de la biblioteca específica que yo desea establecer el vínculo y funcionó bien para mí:

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

Si está utilizando g ++, Piotr Lesnicki señaló que -l:libssl.so.1.0.0 también funciona. Vea más en el original post.

+1

Encuentro que para gcc -l: no funciona, pero tampoco produce un error y todavía intenta vincularse a algo. – jgmjgm

1

¿tiene alguna enlaces a la lib SSL? Si no es así, se puede crear un enlace a la lib SSL deseada como

ln -s libssl.so.1.0.0 libssl.so 

en el directorio SSL y probarlo

+0

Sí, el enlace simbólico es una buena manera de hacerlo, pero a veces tengo que vincular a la versión anterior de la biblioteca de openssl. Quiero algo que pueda cambiar cada vez que compilo mi programa. Pero gracias, funciona! –

Cuestiones relacionadas