Почему я не соблюдаю опцию -rpath-link?
Вопрос
Я обнаружил это, используя 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)
Я в замешательстве; в соответствии с руководством ld сначала должен попытаться найти путь -rpath-link
.
Решение
-rpath-link
задокументировано (на справочной странице ld (1)) только для того, чтобы повлиять на общие библиотеки, которые зависят от других общих библиотек. Поскольку вы связываете исполняемый файл, он либо игнорируется, либо рассматривается как просто -rpath. Или, может быть, это означает, что путь -rpath-link используется только для рекурсивных зависимостей, но вы устанавливаете его при связывании исполняемого файла.
В любом случае, я думаю, что он не используется, потому что у вас нет одной библиотеки в зависимости от другой.
Не связан с StackOverflow