I don’t understand -Wl,-rpath -Wl,

gccldrpath

For convenience I added the relevant manpages below.

My (mis)understanding first: If I need to separate options with ,, that means that the second -Wl is not another option because it comes before , which means it is an argument to the -rpath option.

I don't understand how -rpath can have a -Wl,. argument!

What would make sense in my mind would be this:

-Wl,-rpath .

This should invoke -rpath linker option with the current directory argument.


man gcc:

-Wl,option

Pass option as an option to the
linker. If option contains commas, it
is split into multiple options at the
commas. You can use this syntax to
pass an argument to the option. For
example, -Wl,-Map,output.map passes
-Map output.map to the linker. When
using the GNU linker, you can also get
the same effect with
`-Wl,-Map=output.map'.

man ld:

-rpath=dir

Add a directory to the
runtime library search path. This is
used when linking an ELF executable
with shared objects. All -rpath
arguments are concatenated and passed
to the runtime linker, which uses them
to locate shared objects at runtime.
The -rpath option is also used when
locating shared objects which are
needed by shared objects explicitly
included in the link;

Best Answer

The -Wl,xxx option for gcc passes a comma-separated list of tokens as a space-separated list of arguments to the linker. So

gcc -Wl,aaa,bbb,ccc

eventually becomes a linker call

ld aaa bbb ccc

In your case, you want to say "ld -rpath .", so you pass this to gcc as -Wl,-rpath,. Alternatively, you can specify repeat instances of -Wl:

gcc -Wl,aaa -Wl,bbb -Wl,ccc

Note that there is no comma between aaa and the second -Wl.

Or, in your case, -Wl,-rpath -Wl,..

Related Topic