我刚开始读这本书:Advanced Programming in Unix Environment并尝试编译第一个示例代码,就像在这个线程中一样。虽然使用命令解决了编译问题:
gcc -o myls myls.c -I SCADDRESS/include/ -L SCADDRESS/lib/ -lapue
我在 GCC 手册中查了一下,找不到 gcc 选项 -lxxx 是什么意思,其中 xxx 代表头文件的基本名称(在这种情况下,它是 apue.h)。根据手册,xxx 应该是一些库文件,要么以 .so 结尾的共享目标文件,要么以 .a 结尾的静态库。
谁能解释一下?提前谢谢:)
-llibrary
链接时搜索名为library 的库。
在命令中编写此选项的位置有所不同;链接器按照指定的顺序搜索进程库和目标文件。因此,
`foo.o -lz bar.o'
搜索库`z'
文件后,`foo.o'
但在此之前`bar.o'
。如果`bar.o'
引用 中的函数`z'
,则可能不会加载这些函数。链接器搜索库的标准目录列表,该库实际上是一个名为. 然后链接器使用这个文件,就好像它是按名称精确指定的一样。
`liblibrary.a'
搜索的目录包括几个标准系统目录以及您指定的任何目录
`-L'
。通常以这种方式找到的文件是库文件——其成员是目标文件的归档文件。链接器通过扫描归档文件中的成员来处理归档文件,这些成员定义了迄今为止已被引用但尚未定义的符号。但是如果找到的文件是一个普通的目标文件,它会以通常的方式链接。唯一使用的差异
`-l'
选项并指定一个文件名是`-l'
围绕着图书馆与`lib'
和`.a'
和搜索几个目录。