Tengo un ejecutable que implícitamente carga varias bibliotecas .so, todas construidas por mí. Para la implementación, o al menos la prueba/depuración, me gustaría tener a todos en el mismo directorio:Cómo codificar la ubicación ejecutable en un rpath de Linux?
my_executable
libmylib1.so
libmylib2.so
Para obtener el ejecutable para cargar las bibliotecas de manera implícita, me gustaría establecer una rpath (DT_RUNPATH) para el directorio del ejecutable. Con OS X, lo haría este modo:
clang -dynamiclib -o libmylib1.dylib -install_name @rpath/libmylib1.dylib src1.c src2.c
clang -dynamiclib -o libmylib2.dylib -install_name @rpath/libmylib2.dylib src3.c src4.c
clang -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath,@loader_path/. main.c
Aviso del @loader_path/.
que forma rpath del ejecutable en OS X. Con Linux, lo más cerca que puede llegar a esto es
gcc -dynamiclib -o libmylib1.so src1.c src2.c
gcc -dynamiclib -o libmylib2.so src3.c src4.c
gcc -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath=. main.c
El El problema aquí es que en Linux el rpath sigue el directorio de trabajo actual, no el directorio del ejecutable. ¿Hay alguna manera de lograr lo mismo en Linux?
¡Eso fue todo! Gracias. –