¿Por qué no honra ld la opción '-rpath-link'?
Pregunta
Detecto esto usando strace:
8480 execve("/usr/lib/gcc-lib/i486-slackware-linux/3.3.4/../../../../i486-slackware-linux/bin/ld",
[ "/usr/lib/gcc-lib/i486-slackware-linux/3.3.4/../../../../i486-slackware-linux/bin/ld",
...
"-L/home/bjack/lib",
...
"-rpath-link", "/root/src/firmware/Bj-bg/ab-BJ-gameprom-modules/src/dispatcher/logic",
...
"-lgame_std", "-lygor", "-ldl",
"--rpath", "/home/bjack/lib",
"-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
"/usr/lib/gcc-lib/i486-slackware-linux/3.3.4/crtend.o",
"/usr/lib/gcc-lib/i486-slackware-linux/3.3.4/../../../crtn.o"
], [/* 26 vars */]) = 0
8480 open("/home/bjack/lib/libgame_std.so", O_RDONLY) = 12
8480 open("/home/bjack/lib/libygor.so", O_RDONLY) = -1 ENOENT (No such file or directory)
8480 open("/home/bjack/lib/libygor.a", O_RDONLY) = -1 ENOENT (No such file or directory)
Estoy confundido; de acuerdo con el manual, ld al principio debe intentar encontrar en la ruta -rpath-link
.
Solución
-rpath-link
solo está documentado (en la página del comando man ld (1)) para afectar las bibliotecas compartidas que dependen de otras bibliotecas compartidas. Dado que está vinculando un ejecutable, se ignora o se trata como un simple -rpath. O tal vez significa que la ruta -rpath-link solo se usa para dependencias recursivas, pero la configura al vincular el ejecutable.
De todos modos, creo que no se está utilizando porque no tienes una biblioteca dependiendo de otra.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow