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
Encuentro que para gcc -l: no funciona, pero tampoco produce un error y todavía intenta vincularse a algo. – jgmjgm