Como definir o caminho de execução (-rpath) de um executável com o gcc no Mac OSX?

Desejo definir no Mac OSX o caminho de tempo de execução de um executável (para o vinculador) em tempo de compilation, de modo que as bibliotecas compartilhadas em locais não padrão sejam encontradas pelo vinculador dynamic no início do programa.

No Linux isso é possível com -Xlinker -rpath -Xlinker /path/to (ou usando -Wl,-rpath,/path/to ) e no Solaris você pode adicionar -R/path/to a linha de comando do compilador.

Eu encontrei algumas informações que o Mac OS X gcc tem suporte a rpath desde 10.5, ou seja, desde ~ 2008.

Eu tentei fazê-lo funcionar com um exemplo mínimo – sem sucesso:

 $ cat blah.c int blah(int b) { return b+1; } 

E:

 $ cat main.c #include  int blah(int); int main () { printf("%d\n", blah(22)); return 0; } 

Compilei assim:

 $ gcc -c blah.c $ gcc -dynamiclib blah.o -o libblah.dylib $ gcc main.c -lblah -L`pwd` -Xlinker -rpath -Xlinker `pwd`/t 

Agora o teste:

 $ mkdir t $ mv libblah.dylib t $ ./a.out dyld: Library not loaded: libblah.dylib Referenced from: /Users/max/test/./a.out Reason: image not found Trace/BPT trap 

Assim, a pergunta: Como definir o caminho de execução para o vinculador no Mac OSX?

Btw, definindo DYLD_LIBRARY_PATH funciona – mas eu não quero usar este hack.

Edit: Em relação ao otool -L :

 $ otool -L a.out a.out: libblah.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) 

Parece que o otool -L imprime apenas os nomes das bibliotecas (e os prováveis ​​locais no momento do link) com os quais o executável foi vinculado e nenhuma informação sobre o caminho de execução.

Encontrado por experimentação e inspecionando as linhas de comando geradas pelo Xcode para um projeto de demonstração de rpath de referência por Dave Driblin :

otool -L mostra o nome da instalação das bibliotecas vinculadas. Para que o @rpath funcione, você precisa alterar o nome da instalação da biblioteca:

 $ gcc -dynamiclib blah.o -install_name @rpath/t/libblah.dylib -o libblah.dylib $ mkdir t ; mv libblah.dylib t/ $ gcc main.c -lblah -L`pwd`/t -Xlinker -rpath -Xlinker `pwd`