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 包含头文件 动态库 静态库 链接路径问题相关推荐

  1. C++新增头文件.h,静态库.lib

    方法1: 通过设置工程配置来添加lib库. A.添加工程的头文件目录: 工程-属性-配置属性-c/c+±–常规-附加包含目录:加上头文件存放目录. B.添加文件引用的lib静态库路径: 工程-属性-配 ...

  2. c语言makecode头文件,cmake 添加头文件目录,链接动态、静态库

    罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...

  3. linux分文件编程、静态库与动态库

    参考:linux静态库与动态库编程 作者:丶PURSUING 发布时间:2021-02-02 16:51:49 网址:https://blog.csdn.net/weixin_44742824/art ...

  4. cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  5. linux库--静态库、动态库

    文章目录 一.分文件编程思想 二.动态库静态库 1.概念介绍 2.静态库的制作和使用 3.动态库的制作和使用 一.分文件编程思想 好处: 分模块的编程思想 例如: 网络 a 超声波b 电机c a.功能 ...

  6. linux库引入之动态库静态库(生成和使用)

    库: 库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容. 如何使用 用户需要同时具有头文件和库. ...

  7. CMake 添加头文件目录,链接动态、静态库(添加子文件夹)

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  8. linux系统应用学习(三)--- 动态库静态库

    动态库静态库 库文件:一般指第三方提供的可调用的库函数文件,库文件封存的是函数体,即.c文件里面的内容. 动态库      静态库 Windows下:        xx.dll            ...

  9. 四、Makefile包含 头文件和库文件

    一.Makefile规则 二.Makefile案例-多个文件生成一个目标文件 三.Makefile–生成多个目标文件 四.Makefile包含 头文件和库文件 此篇文章以三.Makefile–生成多个 ...

最新文章

  1. 程序员财富自由了,居然会想做这些事!
  2. 关于在bootstrap中如何做垂直排列的tab切换效果
  3. twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
  4. caffe模型文件解析_Caffe ImageData神经网络基本示例无法解析模型文件
  5. 360的编码html怎么写,html5之meta charset网页字符编码简写
  6. github项目上传与克隆
  7. 磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点
  8. 小米8se线刷机(卡刷机一般解决不了问题,所以不用卡刷)
  9. struts2拦截器
  10. WPF如何实现跨线程更新UI控件
  11. rt 野火imx_server: 野火IM是一套跨平台、核心功能开源的即时通讯解决方案
  12. 苹果手机制作铃声 (简易版)
  13. 国内资深安全专家详谈网页***
  14. Spring boot(四):整合Mybatis
  15. 第四章 SQL语法分类
  16. php image函数,操作压缩图片时,png图片压缩后整个图片变黑
  17. Word文档导出(使用固定模板)
  18. linux conforming code segment nonconforming code segment
  19. 堆排序、归并排序、快速排序
  20. 重磅!骂了 10 年,微信这功能终于要来了!

热门文章

  1. esp32-cam的原理图
  2. MDK 工程宏定义的应用
  3. 『中级篇』docker之wordpress容器SSL(番外篇)(78)
  4. MySQL-MHA搭建
  5. IE遭破坏后的自我修复方法
  6. IRP_MJ_CREATE
  7. Linux下cacti的安装RedHat9,RedHat AS4
  8. lintcode: k Sum 解题报告
  9. Pyqt5_QWidget
  10. J-Link驱动下载和JLINK下载Hex程序