gcc

时间:2015-10-04 00:09:50

标签: gcc

我刚刚开始阅读这本书:Advanced Programming in Unix Enviornment并尝试编译第一个示例代码,与this thread中的代码相同。 尽管使用以下命令解决了编译问题:


gcc -o myls myls.c -I SCADDRESS/include/ -L SCADDRESS/lib/ -lapue

我在GCC手册中查了一下,无法找到gcc选项-lxxx的含义,其中xxx代表头文件的基本名称(在这种情况下,它是apue。 H)。根据手册,xxx应该是一些库文件,对于共享对象文件以.so结尾,对于静态库以.a结尾。

有人可以解释一下吗? Thx提前:))

2 个答案:

答案 0 :(得分:3)

§2.13 "Options for Linking" in the GCC manual中记录了这一点:

  

-llibrary

     
    

链接时搜索名为 library 的库。

         

在您编写此选项的命令中,它会有所不同;该     链接器按照它们的顺序搜索进程库和目标文件     是指定的。因此,`foo.o -lz bar.o'搜索了库`z'     在文件`foo.o'之后但在`bar.o'之前。如果`bar.o'引用     对于`z'中的函数,可能无法加载这些函数。     

         

链接器搜索库的标准目录列表,     这实际上是一个名为`liblibrary.a'的文件。然后,链接器使用此文件,就好像它已按名称精确指定一样。

         

搜索的目录包括几个标准系统目录     加上您使用`-L'指定的任何内容。

         

通常以这种方式找到的文件是库文件 - 存档文件     其成员是目标文件。链接器处理归档文件     通过它扫描定义到目前为止的符号的成员     被引用但未定义。但是,如果找到的文件是     普通的目标文件,它以通常的方式链接。唯一的     使用`-l'选项和指定文件名之间的区别在于`-l'围绕`lib'`.a'     并搜索几个目录。

  

答案 1 :(得分:1)

-l选项告诉gcc链接到指定的库中。在这种情况下,库是apue,它恰好与头文件的名称对齐,就是apue编码器设计项目的方式。实际上,-l选项与头文件无关。就像cas在评论中所说,阅读联机帮助页,它会给你更多的信息。