Por que não ld honrar a opção '-rpath-link'?
Pergunta
Eu detectar isso 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)
Estou confuso; de acordo com o ld manual em primeiro devem tentar encontrar pelo caminho -rpath-link
.
Solução
-rpath-link
só é documentado (na página man ld (1)) para afetar bibliotecas compartilhadas que dependem de outras bibliotecas compartilhadas. Desde que você está ligando um executável, ou é ignorado ou ela é tratada como apenas mais um -rpath. Ou talvez isso significa que o caminho -rpath-link é utilizado apenas para as dependências recursivas, mas você configurá-lo ao vincular o executável.
De qualquer forma, eu acho que ele não está sendo usado porque você não tem uma biblioteca de acordo com outra.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow