首页 > 编程语言 >C/C++库和头文件的查找顺序

C/C++库和头文件的查找顺序

时间:2023-03-08 16:36:32浏览次数:49  
标签:顺序 头文件 路径 指定 C++ 查找 PATH

环境说明

ubuntu 18.04

gcc 7.5.0

必要性

不会有人没遇到过 collect2.exe: error: ld returned 1 exit status 吧,对于我这样的 C++ 新手,安装第三方库都不知道头文件和库文件被安装在哪儿了,自然也不明白怎么去用,经常遇到“不知道包含哪些头文件”,“如何指定链接方式”, “为什么链接错误”等问题,然后一天就在抓耳挠腮的中过去了。

头文件的查找顺序

  1. 先搜索当前目录(此时一般都是引用自己写的 .h 文件,用双引号包含 #include “tools.h”);
  2. 搜索-I选项指定的目录(gcc ... -Ixxx);
  3. 搜索环境变量 C_INCLUDE_PATHCPLUS_INCLUDE_PATHCPATH 指定的目录(不建议使用,参考详解Linux下环境变量C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、CPATH以及常见错误);
  4. 搜索编译器内定的目录,可以通过 cpp -v 查看(也是源码安装的第三方库默认的安装路径)。

image-20230308141125920

库的查找顺序

因为有静态库和动态库之分,所以库的查找顺序分为“编译时库的查找顺序”和“运行时库的查找顺序”。

编译时库的查找顺序

  1. -L-Wl,rpath 指定的路径;
  2. 环境变量 LD_LIBRARY_PATH 里指定的路径;
  3. 查找 /etc/ld.so.conf 文件指定的路径(其默认路径我一般简记为 /lib/usr/libusr/local/lib以及这些路径下跟机器架构相关的路径);

image-20230308161120859

运行时动态库查找路径

动态库这玩意儿出现后,不仅要在编译时指定库的搜索路径,还要在运行时指定。

  1. 编译时 -Wl,rpath 指定的路径;
  2. 环境变量 LD_LIBRARY_PATH 里指定的路径;
  3. 查找 /etc/ld.so.conf 文件指定的路径;

没错,最可恨的是 -L 指定的路径不在其中!

关于如何使用这几种方式的使用可以参考C/C++构建静态库和动态库

标签:顺序,头文件,路径,指定,C++,查找,PATH
From: https://www.cnblogs.com/zwjason/p/17192473.html

相关文章

  • 这个二分查找好难(Drying)
    DryingItisveryhardtowashandespeciallytodryclothesinwinter.ButJaneisaverysmartgirl.Sheisnotafraidofthisboringprocess.Janehasdecided......
  • HDU2199 Can you solve this equation? (二分查找)
    Canyousolvethisequation?TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):12794    AcceptedS......
  • C/C++编译器构成
    C/C++编译器构成C/C++编译器有4个基本组成部分:预处理器、编译器、汇编器和链接器,它们功能大致如下:一般我们说编译器是指整套工具链,与其中一个组成部分重名。预处理......
  • GitHub存储库里查找敏感数据
    GitHub存储库里查找敏感数据一些源代码搜索平台https://github.com/search?type=code&auto_enroll=truehttps://docs.gitlab.com/ee/user/search/advanced_search.html......
  • find命令,查找文件
    find是Linux中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode号等来搜索文件。[root@localhost~]#find搜索路径[选项]搜索内容选......
  • C++ 性能反向优化——用哈希表消除if else导致的性能降低。
    从代码整洁的角度考虑,对于不同的值将调用相同参数的不同函数,我们通常可以通过建立从值到对应函数指针的哈希表,从而将ifelse消除。但实际可能使性能更低,以下是测试例子。......
  • C++ 基础
    基础程序语言分为低级语言(机器语言、汇编语言)中级语言高级语言(C、C++等)。C++语言的主要特点兼容C语言面向对象(继承和多态)引进了类和对象的概念C++的基本......
  • C++自定义比较函数的bug
    autocmp=[](intx,inty){returntrue;};priority_queue<int,vector<int>,cmp>q;报错第三个参数失配,需要一个类型,而不是对象。平时用sort直接传cmp习惯了,才发......
  • 环形链表(哈希表、链表)、寻找两个正序数组的中位数(数组、二分查找)、二进制求和(位
    环形链表(哈希表、链表)给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整......
  • ℬ悟透C++┇Puzzle记录
    C++Puzzles★1.有如下代码,问:ptr指向了谁?能通过ptr调用Derived类重写的函数吗(即多态还起作用吗)?dynamic_cast到底是什么作用?ptr2与ptr性质是一样的吗?Derived*derived=ne......