添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

gcc 7.5.0

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

头文件的查找顺序

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

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

    编译时库的查找顺序

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

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

  • 编译时 -Wl,-rpath 指定的路径;
  • 环境变量 LD_LIBRARY_PATH 里指定的路径;
  • 查找 /etc/ld.so.conf 文件指定的路径;
  • 没错,最可恨的是 -L 指定的路径不在其中!

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