vitaly.v.ch
vitaly.v.ch

Reputation: 2532

Why doesn't ld honor the '-rpath-link' option?

I detect this using 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)

I'm confused; according to the manual ld at first must try to find at -rpath-link path.

Upvotes: 3

Views: 4734

Answers (1)

Peter Cordes
Peter Cordes

Reputation: 364160

-rpath-link is only documented (in the ld(1) man page) to affect shared libs that depend on other shared libs. Since you're linking an executable, either it's ignored or it's treated like just another -rpath. Or maybe it means that the -rpath-link path is only used for recursive dependencies, but you do set it when linking the executable.

Anyway, I think it's not being used because you don't have one library depending on another.

Upvotes: 3

Related Questions