文章目录
- 一、错误发现
- 二、include两种查找方式
- 三、路径
- 1.gcc与g++路径
- 2.头文件路径
- (1)默认路径
- (2)使用-l指定路径寻找。
- (3)gcc搜索头文件的顺序
- 3.库文件路径
- (1)默认路径
- (2)编译时指定路径
- (3)在配置文件中指定路径
- (4)通过环境变量
- (5)查找顺序
一、错误发现
在使用各种各样的C++库的时候,有的时候会遇到找不到的问题,特此整理此博客来记录gcc/g++链接动静态库的过程。
二、include两种查找方式
#include<>表示默认系统路径下寻找。
#include""表示先在当前路径寻找,再去系统路径寻找。
三、路径
1.gcc与g++路径
- gcc/g++的可执行文件的路径都在/usr/bin中。
2.头文件路径
gcc与g++所查找的头文件所在路径有两种种情况:
(1)默认路径
默认指定到/usr/include路径。但是在一些编写驱动模块的设定中,会强制gcc不去搜索默认路径,此时可以加-nostdinc选项,此时必须使用-l来指定路径。
(2)使用-l指定路径寻找。
(1)假设文件结构如下:
test.c
test/test.h
(2)此时有两种方式来找到这个头文件:
第一种方式在test.c的这样包含头文件:#include"test/test.h"
第二种方式在gcc执行的时候:gcc -l test test.c
(3)gcc搜索头文件的顺序
先按顺序查找-l指定的路径,然后在gcc的环境变量中寻找,最后再去内定目录中查找。
注意这只是头文件的指定,下面介绍库文件的查找方法。
3.库文件路径
(1)默认路径
动态库的默认搜索路径在/lib和/usr/lib中。
(2)编译时指定路径
-L后的内容表示的是库的路径,-l后表示的是库的名称。
(3)在配置文件中指定路径
在配置文件/etc/ld.so.conf中指定动态库搜索路径,其中他的每一行都是一个搜索路径。每次编辑完该文件之后都要执行ldconfig来进行刷新。
(4)通过环境变量
通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
同时也可以使用export指令来更新环境变量。
(5)查找顺序
1.编译目标代码时指定的动态库搜索路径。
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径。
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径。
4.默认的动态库搜索路径/lib。
5.默认的动态库搜索路径/usr/lib。