Si je linke avec les arguments "-L/var/local/myimage/usr/lib -ldl" (je souhaite "linker" mon appli avec la lib libdl.so de mon environement /var/local/myimage/). Il semblerait que le lien n'est pas fait (comme le montre le ldd libmylib.so).
olivier@olivier-linux:/tmp$ gcc -shared -Wl,-soname=libmylib.so -o libmylib.so test_lib.c -L/var/local/myimage/usr/lib -ldl
olivier@olivier-linux:/tmp$ ldd libmylib.so
linux-gate.so.1 => (0xb7f2b000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7daf000)
/lib/ld-linux.so.2 (0xb7f2c000) |
... Si tu essayes avec seulement "-ldl". Dans ce cas-la, le linker va utiliser /usr/lib/libdl.so.
olivier@olivier-linux:/tmp$ gcc -shared -Wl,-soname=libmylib.so -o libmylib.so test_lib.c -ldl
olivier@olivier-linux:/tmp$ ldd libmylib.so linux-gate.so.1 => (0xb7fe0000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7fc3000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e60000)
/lib/ld-linux.so.2 (0xb7fe1000) |
Si je remplace "-L/var/local/myimage/usr/lib" par "-Xlinker -rpath-link /var/local/myimage/usr/lib" ... tout se passe bien :
olivier@olivier-linux:/tmp$ gcc -shared -Wl,-soname=libmylib.so -o libmylib.so test_lib.c -Xlinker -rpath-link /var/local/myimage/usr/lib -ldl
olivier@olivier-linux:/tmp$ ldd libmylib.so
linux-gate.so.1 => (0xb7fc0000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7fa3000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e40000)
/lib/ld-linux.so.2 (0xb7fc1000) |
La conclusion de l'experience pourrait etre qu'il ne faut pas utiliser "-Ldir" lorsqu'on veut faire du cross-compiling, mais j'aimerais trouver une reponse un peu plus theorique.