linux下头文件及库文件搜索路径知识汇总

这篇具有很好参考价值的文章主要介绍了linux下头文件及库文件搜索路径知识汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

头文件搜索路径

系统默认搜索路径

/usr/include

跟gcc相关的搜索目录:

/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include

安装gcc时,如果有指定prefix的话,那么系统的默认搜索路径为:

/usr/include
prefix指定的路径/x86_64-redhat-linux/4.8.2/include

通过环境变量添加搜索路径

  1. C_INCLUDE_PATH:编译 C 程序的时候使用的环境变量
  2. CPLUS_INCLUDE_PATH:编译 C++ 程序的时候使用的环境变量
  3. CPATH:编译 C、 C++及Objective-C 程序时使用的环境变量
  4. OBJC_INCLUDE_PATH:编译 Objective-C 程序的时候使用的环境变量

编译时指定搜索路径

通过 gcc 的 -I 参数。

编译时搜索优先级

  1. 编译时指定搜索路径;
  2. 通过环境变量添加搜索路径;
  3. 系统默认搜索路径;

库文件搜索路径

系统默认搜索路径

/lib   
/usr/lib   

永久添加系统库文件搜索路径

  • 往/etc/ld.so.conf文件中添加需要搜索的路径,添加完后执行 ldconfig
  • 在/etc/ld.so.conf.d/ 目录下创建文件,文件中添加需要搜索的路径,添加完后执行ldconfig,如:
    [root@localhost ld.so.conf.d]# pwd  
    /etc/ld.so.conf.d  
    [root@localhost ld.so.conf.d]# ls   
    bind-export-x86_64.conf  kernel-3.10.0-1160.el7.x86_64.conf  mariadb-x86_64.conf   
    [root@localhost ld.so.conf.d]# cat mariadb-x86_64.conf  
    /usr/lib64/mysql
    

通过环境变量添加搜索路径

LIBRAY_PATH:用于在程序编译时告诉链接器ld,库的搜索路径。
LD_LIBRARY_PATH:用于在程序加载时告诉动态链接器,动态库的搜索路径。

编译时指定搜索路径

(1)通过 gcc 的 -L 参数指定库的搜索路径,这种方法是在程序链接成可执行文件时用。
(2)通过 gcc 的 -Wl,-rpath 参数指定库的搜索路径,这种方法在程序运行时,在指定的目录下搜索并加载相应的动态库。

搜索优先级

编译时搜索优先级

  1. gcc 的 -L 参数指定的库搜索路径;
  2. 通过环境变量添加搜索路径;
  3. 永久添加系统库文件搜索路径;
  4. 系统默认搜索路径目录: /lib -> /usr/lib;

运行时搜索优先级

  1. gcc 的 -Wl,-rpath 参数指定的库搜索路径;
  2. 通过环境变量添加搜索路径;
  3. 永久添加系统库文件搜索路径;
  4. 系统默认搜索路径目录: /lib -> /usr/lib;

相关知识点

ldconfig

在默认搜索目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库。
如:

ldconfig -v

ldd

可以查看软件依赖了哪些库, 如:

[root@localhost bin]# ldd grep
        linux-vdso.so.1 =>  (0x00007ffc4ffe3000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f2bca9e1000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2bca613000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2bca3f7000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2bcac43000)

修改环境变量

将目录/usr/local/lib添加到环境变量LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

通过环境变量添加的库搜索路径,系统重启将被清除,要想系统重启后仍然生效:
在/etc/profile文件中添加添加:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib文章来源地址https://www.toymoban.com/news/detail-426756.html

到了这里,关于linux下头文件及库文件搜索路径知识汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows执行完LoadLibrary()后,可以删除源动态库文件,函数不会锁库文件

    windows执行完LoadLibrary()后,可以删除源动态库文件,函数不会锁库文件。 运行结果:

    2024年02月13日
    浏览(28)
  • 【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘

    本文主要介绍更改Arduino IDE (含2.0以上版本)默认库文件位置的方法。  原创文章,转载请注明出处: 【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘-CSDN博客 文章浏览阅读185次。本文主要介绍更改Arduino IDE (含2.0以上版本)默认库

    2024年02月03日
    浏览(49)
  • C标准库文件&常用函数

    编号 头文件 C标准版本 介绍 1 assert.h C89/C90 条件编译宏,将参数与零比较 2 ctype.h C89/C90 用来确定包含于字符数据中的类型的函数 3 errno.h C89/C90 报告错误条件的宏 4 float.h C89/C90 浮点数类型的极限 5 limits.h C89/C90 基本类型的大小 6 locale.h C89/C90 本地化工具 7 math.h C89/C90 常用数据函

    2024年02月12日
    浏览(34)
  • C++有哪些常用的库文件

    常用库文件: iostream:  输入输出流库,包含cin、cout、cerr等标准输入输出对象。 string : 字符串库,包含字符串类型std::string及相关操作函数。 vector : 动态数组库,包含vector类型及相关操作函数。 map:  字典库,包含map、multimap、set、multiset等关联容器类型及相关操作函数。 algorithm

    2024年02月02日
    浏览(35)
  • 第十二部分 使用 make 更新函数库文件

    目录 前言  一、函数库文件的成员 二、函数库成员的隐含规则 三、函数库文件的后缀规则 四、注意事项         函数库文件也就是对 Object 文件(程序编译的中间文件)的打包文件。在 Unix 下,一 般是由命令\\\"ar\\\"来完成打包工作。         一个函数库文件由多个文件

    2024年01月20日
    浏览(38)
  • 通过 CMake 制作库文件 静态库 和 动态库

    CMake Calc 项目 在这里有 add.c,div.c,mult.c,sub.c,main.c,head.h 二、生成静态库  CMakeLists.txt  CMakeLists.txt   (也可以写成这样) 执行命令:  三、生成动态库 CMakeLists.txt    CMakeLists.txt   (也可以写成这样) 

    2024年01月16日
    浏览(43)
  • openssl缺少libssl.so.1.1库文件

    这是由于openssl库的位置不正确造成的,一般出现在openssl源码升级场景下。 源码编译完成后,需要对libssl.so.1.1做一个软连接,从openssl源码安装目录/usr/local/openssl/lib/下面将编译好的libssl.so.1.1进行软连接。

    2024年01月21日
    浏览(38)
  • 现代CMake高级教程 - 第 3 章:链接库文件

    双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 main.cpp 调用 mylib.cpp 里的 say_hello 函数 1. 直接链接到一起编译 2. mylib 作为一个静态库 编译: 生成了 libmylib.a: 3. mylib 作为一个动态库 编译: 4. mylib 作为一个对象库 对象库类似于静态库,但不生成 .a 文件,只由 CMake

    2024年02月02日
    浏览(32)
  • makefile 编译动态链接库使用(.so库文件)

    动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享 动态链接库 动态:动态加载 链接:二进制文件和库文件分离。 库 库文件 .so 新建一个文件TestSo 编译一下 main.cpp 写好之后我们

    2024年01月23日
    浏览(32)
  • 【cmake学习】cmake 引入第三方库(头文件目录、库目录、库文件)

    程序的编写需要用到头文件,程序的编译需要lib文件,程序的运行需要dll文件,因此cmake引入第三方库其实就是将include目录、lib目录、bin目录引入工程。         目录 1、find_package(批量引入库文件和头文件) 2、include_directories(引入头文件目录) 3、link_directories(引入库

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包