Вопрос

Я обнаружил это, используя 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 используется только для рекурсивных зависимостей, но вы устанавливаете его при связывании исполняемого файла.

В любом случае, я думаю, что он не используется, потому что у вас нет одной библиотеки в зависимости от другой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top