2011-07-10 16 views
9

Estoy tratando de especificar rpath en mi binario. Mi makefile se parece a esto:¿Cómo se especifica RPATH en un archivo MAKE?

CC=gcc 
CFLAGS=-Wall 
LDFLAGS= -rpath='../libs/' 
main: main.c 
    gcc -o main main.c 

clean: 
    rm -f main main.o 

Pero cuando consulto rpath con el comando readelf -a ./main | grep rpath me sale nada He intentado especificando rpath como LDFLAGS= "-rpath=../libs/" pero incluso eso no parece funcionar.

¿Puede alguien publicar un ejemplo sobre cómo debo especificar rpath en un archivo MAKE?

gcc y ld versiones son-

gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 
GNU ld (GNU Binutils for Ubuntu) 2.21.0.20110327 

Respuesta

33

Si establece las variables, probablemente debería usarlos. ¡Es tonto no hacerlo, especialmente cuando Make no establecerá mágicamente esas variables para ti! :)

main: main.c 
    $(CC) $(CFLAGS) $(LDFLAGS) -o main main.c 

Otro problema es LDFLAGS, debe ser

LDFLAGS="-Wl,-rpath,../libs/" 

La costumbre gcc interruptor para pasar opciones al enlazador es -Wl,, y es necesaria porque gcc propio puede que no comprenda la opción del enlazador -rpath. Mientras que algunas compilaciones de varias versiones de gcc aceptan -rpath, nunca lo he visto documentado en gcc páginas de manual o páginas de información. Para una mejor portabilidad, se debe preferir -Wl,-rpath.

+0

Después de actualizar makefile, consigo debajo de errores gcc: opción no reconocida '-rpath = ../libs /' – user837208

+0

funcionó como un encanto! gracias un montón. – user837208

+3

Es un punto pequeño, pero, por si alguien se preguntaba, sólo para añadir que las rutas completas también son válidos en los rpaths como 'LDFLAGS =" - Wl, -rpath,/mnt/es/extensiones/cosa/usr/lib/"' – twobob

Cuestiones relacionadas