Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does the order of -l and -L options in the GNU linker matter?

The -l option tells the linker to search the libraries in the standard dirs. And with -L, we can specify our own library directories for searching.

Question: Does the sequence of order matters for the -L option too, like it does for the -l w.r.t the linker?

This link: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html doesn't say much about the sequence of -L.

EDIT Also,

Directories specified on the command line are searched before the default directories

is from the man page (as pointed by Dmitry), does this mean that even if I specify the order like:

gcc -lm hello.c -Lx

still the directory specified with -L will be given preference first?

like image 598
Aquarius_Girl Avatar asked Apr 28 '11 10:04

Aquarius_Girl


People also ask

What is hash style in GCC?

what does --hash-style means. --hash-style allows you to change the format of hashtable which is used for runtime symbol resolution (see Drepper's article, section "The GNU-style Hash Table" for details).

Which GCC option is used to link the library?

The -l option tells gcc to link in the specified library.

What does linking mean in GCC?

Linking is the process of collecting and combining various pieces of code and data into a single file that can be loaded (copied) into memory and executed.


1 Answers

Yes, the order of -L options matters - just like -l and -I options.

From man ld

-Lsearchdir
--library-path=searchdir

Add path searchdir to the list of paths that ld will search for archive libraries and ld control scripts. You may use this option any number of times. The directories are searched in the order in which they are specified on the command line. Directories specified on the command line are searched before the default directories. All -L options apply to all -l options, regardless of the order in which the options appear.

GCC documentations and more specifically Linking Options will be useful for you

Edit
Sorry, indeed I missed to check the link you've given. "man ld" can just be written in the console.

Edit2
I made a simple test putting -l before -L options and it shows no difference comparing to -L before -l

So answering your second question, this

gcc -lm hello.c -Lx

is equal to this

gcc -Lx -lm hello.c

libm is searched first in directory x/ in both tests.

Note though that putting -l<lib> before source files is a bad practice, that may lead to undefined references when linking. This is the correct way

gcc hello.c -Lx -lm 
like image 142
Dmitry Yudakov Avatar answered Oct 07 '22 13:10

Dmitry Yudakov