GNU链接器中-l和-L选项的顺序是否重要?

时间:2011-04-28 10:35:55

标签: gcc linker ld binutils

-l选项告诉链接器搜索标准目录中的库。 使用-L,我们可以指定自己的库目录进行搜索。

问题:顺序顺序是否也适用于-L选项,就像链接器中-l w.r.t一样?

此链接:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html-L的序列没有太多说明。

修改 另外,

  

命令中指定的目录   在默认值之前搜索行   目录

来自手册页(由Dmitry指出),这是否意味着即使我指定的顺序如下:

gcc -lm hello.c -Lx

首先会优先考虑用-L指定的目录吗?

1 个答案:

答案 0 :(得分:15)

是的,-L选项的顺序很重要 - 就像-l-I选项一样。

来自man ld

  

<强> -Lsearchdir
  的 - 库路径= searchdir

     

将路径searchdir添加到ld将搜索归档库和ld控制脚本的路径列表中。您可以多次使用此选项。将按照在命令行中指定目录的顺序搜索目录。在默认目录之前搜索命令行中指定的目录。无论选项出现的顺序如何,所有-L选项都适用于所有-l选项。

GCC documentations以及更具体的Linking Options对您有用

修改
对不起,我确实错过了查看你给出的链接。 “man ld”可以写在控制台中。

<强> EDIT2
我在-l选项之前进行了一次简单的测试-L,与-L

之前的-l相比没有显示出差异

回答你的第二个问题,这个

gcc -lm hello.c -Lx

等于此

gcc -Lx -lm hello.c

在两个测试中,首先在目录x /中搜索libm。

请注意,将-l<lib>放在源文件之前是一种不好的做法,这可能会在链接时导致未定义的引用。这是正确的方法

gcc hello.c -Lx -lm