GCC编译选项-L与-l的作用及-lnode命名疑问
关于Makefile中-L和-l选项的解释及你的问题解答
一、-L选项的作用
-L是给链接器指定额外的库搜索目录。在你的编译命令中:
g++ main.cpp -o main.exe -I nodelib/inc -L nodelib/ -lnode
-L nodelib/表示告诉链接器,除了系统默认的库目录外,还要去nodelib/目录下查找需要的库文件。
二、-l选项的作用
-l是告诉链接器需要链接某个库,后面跟的是库的基础名称,链接器会自动按照固定规则匹配对应的库文件:
- 对于静态库(
.a格式):链接器会寻找名为lib{基础名称}.a的文件 - 对于动态库(Linux下
.so,Windows下.dll/.lib):链接器会寻找名为lib{基础名称}.so(或对应平台的动态库格式)的文件
在你的场景中,-lnode对应的就是libnode.a——这正好是你src目录下Makefile生成后移到nodelib/目录的静态库文件,所以链接器能找到它并成功链接。
三、为什么-lNode会报错?
链接器对库名称的匹配是大小写敏感的,当你使用-lNode时,链接器会去寻找名为libNode.a的文件,但你的库文件实际是libnode.a(全小写的node),自然找不到,所以会报cannot find -lNode的错误。
四、结合你的流程再梳理
- 执行
cd nodelib && make时,src目录的Makefile会编译生成静态库libnode.a,并将其移动到nodelib/目录下; - 后续的g++命令中:
-I nodelib/inc是让编译器找到nodelib/inc下的头文件(Node.hpp、Set.hpp);-L nodelib/指定链接器去nodelib/找库;-lnode告诉链接器要链接libnode.a这个静态库,最终生成可执行文件main.exe。
内容的提问来源于stack exchange,提问作者Bratasena M
相关产品推荐
相关产品推荐

