Warum ld nicht ehrt die '-rpath-Link' Option?
Frage
ich erkennen, dies mit 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)
Ich bin verwirrt; gemäß dem Handbuch ld zunächst müssen versuchen, auf -rpath-link
Weg zu finden.
Lösung
-rpath-link
wird nur dokumentiert (in der ld (1) man-Seite) geteilt Libs zu beeinflussen, die auf anderen geteilt Libs abhängen. Da Sie eine ausführbare Datei sind die Verknüpfung, entweder es wird ignoriert oder es nur wie ein -rpath behandelt wird. Vielleicht bedeutet es, dass der -rpath-Link-Pfad nur für rekursive Abhängigkeiten verwendet wird, aber Sie sie festgelegt, wenn die ausführbare Datei verknüpft.
Wie auch immer, ich denke, es ist nicht, weil Sie eine Bibliothek nicht auf einem anderen abhängig haben verwendet werden.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow