Issue
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;
Solution
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,.
.
Answered By - Kerrek SB Answer Checked By - Robin (WPSolving Admin)