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

前端 未结 1 1185
盖世英雄少女心
盖世英雄少女心 2020-12-06 04:27

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.

相关标签:
1条回答
  • 2020-12-06 05:24

    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 
    
    0 讨论(0)
提交回复
热议问题