2011-07-10 26 views
9

Próbuję podać rpath w moim pliku binarnym. Moje makefile wygląda this-Jak określić RPATH w pliku Makefile?

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

clean: 
    rm -f main main.o 

Ale kiedy kwerendy rpath pomocą polecenia readelf -a ./main | grep rpath mam nic Próbowałem określając rpath jak LDFLAGS= "-rpath=../libs/" ale nawet to nie wydają się działać.

Czy ktoś może podać przykład, w jaki sposób powinienem podać rpath w makefile?

GCC i ld wersje są-

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

Odpowiedz

33

Po ustawieniu zmiennych, powinieneś ich używać. To niemądre, zwłaszcza gdy make nie ustawi magicznie tych zmiennych dla ciebie! :)

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

Innym problemem jest LDFLAGS powinno być

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

Zazwyczaj gcc przełącznik przechodząc do opcji linkera jest -Wl,, a to jest potrzebne, ponieważ sama gcc może nie rozumieć gołą linkerową opcję -rpath. Podczas gdy niektóre wersje różnych wersji gcc akceptują, nie widziałem tego na stronach man lub stronach informacyjnych. Aby uzyskać lepszą przenośność, preferowane powinno być -Wl,-rpath.

+0

Po aktualizacji pliku make, otrzymuję poniżej error-gcc: nierozpoznana opcja '-rpath = ../libs /' – user837208

+0

Działa jak urok! wielkie dzięki. – user837208

+3

To drobiazg, ale na wypadek, gdyby ktoś się zastanawiał, wystarczy dodać, że pełne ścieżki są również ważne w ścieżkach takich jak 'LDFLAGS =" - Wl, -rpath,/mnt/us/extensions/thing/usr/lib/"' – twobob

Powiązane problemy