linux gcc 包含头文件 动态库 静态库 链接路径问题
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。
【1】include头文件路径
除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:
# C
export C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH
# CPP
export CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
1) #include“headfile.h”
搜索顺序为:
①先搜索当前目录
②然后搜索-I指定的目录
③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH)
④最后搜索gcc的内定目录
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
各目录存在相同文件时,先找到哪个使用哪个。
2) #include<headfile.h>
①先搜索-I指定的目录
②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH
③最后搜索gcc的内定目录
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
与上面的相同,各目录存在相同文件时,先找到哪个使用哪个。这里要注意,#include<>方式不会搜索当前目录!
【2】link链接库文件路径
链接库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的(也可以在编译命令中通过 -l -L 来指定,这里讲的是使用系统默认搜索路径)。
一般 Linux 系统把 /lib /usr/lib /usr/local/lib 作为默认的库搜索路径,所以使用这几个目录中的链接库文件可直接被搜索到(不需要专门指定链接库路径)。对于默认搜索路径之外的库,则需要将其所在路径添加到gcc/g++的搜索路径之中。
链接库文件的搜索路径指定有两种方式:1)修改/etc/so.ld.conf 2)修改环境变量,在其中添加自己的路径
1)在环境变量中添加
动态链接库搜索路径:
export LD_LIBRARY_PATH=XXX:$LD_LIBRARY_PATH
静态链接库搜索路径:
export LIBRARY_PATH=XXX:$LIBRARY_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
2)在/etc/ld.so.conf 中添加指定的链接库搜索路径(需要root权限),然后运行 /sbin/ldconfig,以达到刷新 /etc/ld.so.cache的效果。
以上两种方式均可以达到指定链接库搜索路径的效果。
如果以上两种都不行 就看看./configure --help 看看缺的文件是不是有对应的选项
比如 libgcrypt 的源码编译 ./configure 提示缺少库
configure: error: libgpg-error is needed.
设置环境变量 PATH LD_LIBRARY_PATH PKG_CONFIG_PATH 都不行 但是查看help发现以下信息:
[root@e65d4db118c4 libgcrypt-1.8.4]# ./configure --help | grep gpg-error--with-libgpg-error-prefix=PFX
[root@e65d4db118c4 libgcrypt-1.8.4]# find / -name "gpg-error"
/root/openvas/build/libgpg-error-1.32/src/gpg-error
/root/openvas/build/libgpg-error-1.32/src/.libs/gpg-error
/usr/openvas/share/common-lisp/source/gpg-error
/usr/openvas/bin/gpg-error
/usr/bin/gpg-error
[root@e65d4db118c4 libgcrypt-1.8.4]# ./configure --prefix=/usr/openvas --with-libgpg-error-prefix=/usr/openvas
找到gpg-error的bin文件 ./configure通过
linux gcc 包含头文件 动态库 静态库 链接路径问题相关推荐
- C++新增头文件.h,静态库.lib
方法1: 通过设置工程配置来添加lib库. A.添加工程的头文件目录: 工程-属性-配置属性-c/c+±–常规-附加包含目录:加上头文件存放目录. B.添加文件引用的lib静态库路径: 工程-属性-配 ...
- c语言makecode头文件,cmake 添加头文件目录,链接动态、静态库
罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...
- linux分文件编程、静态库与动态库
参考:linux静态库与动态库编程 作者:丶PURSUING 发布时间:2021-02-02 16:51:49 网址:https://blog.csdn.net/weixin_44742824/art ...
- cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...
CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...
- linux库--静态库、动态库
文章目录 一.分文件编程思想 二.动态库静态库 1.概念介绍 2.静态库的制作和使用 3.动态库的制作和使用 一.分文件编程思想 好处: 分模块的编程思想 例如: 网络 a 超声波b 电机c a.功能 ...
- linux库引入之动态库静态库(生成和使用)
库: 库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容. 如何使用 用户需要同时具有头文件和库. ...
- CMake 添加头文件目录,链接动态、静态库(添加子文件夹)
CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...
- linux系统应用学习(三)--- 动态库静态库
动态库静态库 库文件:一般指第三方提供的可调用的库函数文件,库文件封存的是函数体,即.c文件里面的内容. 动态库 静态库 Windows下: xx.dll ...
- 四、Makefile包含 头文件和库文件
一.Makefile规则 二.Makefile案例-多个文件生成一个目标文件 三.Makefile–生成多个目标文件 四.Makefile包含 头文件和库文件 此篇文章以三.Makefile–生成多个 ...
最新文章
- 程序员财富自由了,居然会想做这些事!
- 关于在bootstrap中如何做垂直排列的tab切换效果
- twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
- caffe模型文件解析_Caffe ImageData神经网络基本示例无法解析模型文件
- 360的编码html怎么写,html5之meta charset网页字符编码简写
- github项目上传与克隆
- 磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点
- 小米8se线刷机(卡刷机一般解决不了问题,所以不用卡刷)
- struts2拦截器
- WPF如何实现跨线程更新UI控件
- rt 野火imx_server: 野火IM是一套跨平台、核心功能开源的即时通讯解决方案
- 苹果手机制作铃声 (简易版)
- 国内资深安全专家详谈网页***
- Spring boot(四):整合Mybatis
- 第四章 SQL语法分类
- php image函数,操作压缩图片时,png图片压缩后整个图片变黑
- Word文档导出(使用固定模板)
- linux conforming code segment nonconforming code segment
- 堆排序、归并排序、快速排序
- 重磅!骂了 10 年,微信这功能终于要来了!