Почему я не соблюдаю опцию -rpath-link? - PullRequest
2 голосов
/ 01 декабря 2009

Я обнаруживаю это с помощью 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 path.

1 Ответ

3 голосов
/ 10 декабря 2009

-rpath-link только документировано (на справочной странице ld (1)), чтобы повлиять на общие библиотеки, которые зависят от других общих библиотек. Поскольку вы связываете исполняемый файл, он либо игнорируется, либо рассматривается как просто -rpath. Или, может быть, это означает, что путь -rpath-link используется только для рекурсивных зависимостей, но вы устанавливаете его при связывании исполняемого файла.

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

...