Tengo una aplicación que está dividida en varias bibliotecas con el objetivo de reutilizar el código. En Windows, todo lo que tengo que hacer es colocar los archivos .dll en la misma ruta que el ejecutable y los encuentra automáticamente. En Linux (dado que codifica las rutas a las cosas) debo especificar la variable de entorno LD_LIBRARY_PATH
o precargar las bibliotecas antes del ejecutable.Ruta de biblioteca compartida como directorio ejecutable
He visto algunas cosas sobre la incrustación de la ruta utilizando la opción del enlazador de -Wl,-rpath=<PATH>
y la he probado usando .
como la ruta. Pero eso solo se ve en el directorio de trabajo actual, no en el directorio del ejecutable.
¿Hay alguna manera de especificar en el vinculador que se busque en el directorio del ejecutable para las bibliotecas compartidas de forma predeterminada (como en Windows)?
Gracias! Matt
Al usar $ ORIGIN, necesita asegurarse de que $ esté cotizado correctamente para que el vinculador realmente lo vea. Desde la línea de comando, quiere "-ruta \ $ ORIGEN" y desde un archivo Makefile que desee "-ruta \ $$ ORIGEN" –
Estoy usando Eclipse y CDT, y estoy poniendo la opción debajo de los indicadores del enlazador misceláneo. Estoy poniendo '-Wl, -rpath = $$ ORIGIN' y en la ventana de salida lo muestra con un solo $. Pero parece que no funciona. Probé varias variaciones, pero no pasa nada. Es como si el enlazador ignorara la bandera. He intentado: -Wl, -rpath = $ ORIGEN -Wl, - rpath = $ ORIGEN -Wl, -rpath =/$ ORIGEN -Wl, -rpath = $ ORIGEN/ -Wl, -rpath =/$ ORIGIN/ etc. – CuppM
¿Utiliza elfdump o el equivalente local para ver qué hay allí? Use ldd y vea lo que dice? – bmargulies