1 c++ 头文件和库的位置与编译器类型有关。
2 两种编译器
gcc是一个编译器集合,不是单一编译器。使用autotools,make作为build工具。使用gdb作为debugger。使用ld作为linker。
clang/llvm是一个编译器工具链。使用cmake作为build工具。使用lldb作为debugger。使用lld作为linker。
编译器分前端和后端。clang是前端,llvm是后端。
3 头文件和库文件
1)编译器 -I -L指定的路径
2)环境变量CPLUS_INCLUDE_PATH,LIBRARY_PATH
3)编译器设定的路径
gcc:
/usr/include/c++
clang:
/usr/include/clang
/lib, /usr/lib
libc++ 是针对 Clang 编译器特别重写的 C++ 标准库,而 libstdc++ 则是 GCC 的对应 C++ 标准库了
4 动态库的搜索
动态库的搜索路径搜索的先后顺序是:
1)编译目标代码时指定的动态库搜索路径(这是通过gcc 的参数"-Wl,-rpath,“指定。当指定多个动态库搜索路径时,路径之间用冒号”:“分隔)
2)环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号”:"分隔)
3)配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4)默认的动态库搜索路径/lib;
5)默认的动态库搜索路径/usr/lib。
参考文献
https://www.toptal.com/c-plus-plus/c-plus-plus-understanding-compilation
https://medium.com/coding-den/the-compilation-process-a1307824d40e
https://www.tenouk.com/ModuleW.html