2009-12-01 12 views
2

Je DETECT en utilisant strace:Pourquoi ld ne respecte pas l'option '-rpath-link'?

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) 

Je suis confus; selon le manuel ld au début doit essayer de trouver au -rpath-link chemin.

Répondre

3

-rpath-link est documenté uniquement (dans la page de manuel ld (1)) pour affecter les bibliothèques partagées qui dépendent d'autres bibliothèques partagées. Puisque vous liez un exécutable, soit il est ignoré, soit il est traité comme un autre -rpath. Ou peut-être que cela signifie que le chemin -rpath-link n'est utilisé que pour les dépendances récursives, mais que vous le définissez lors de la liaison de l'exécutable.

Quoi qu'il en soit, je pense qu'il n'est pas utilisé parce que vous n'avez pas une bibliothèque en fonction de l'autre.

+0

très probablement Vous avez raison –