zoukankan      html  css  js  c++  java
  • Linux系统编程2_gcc编译器及头文件库文件搜索路径

    gcc实际上是个工具链,在编译程序的过程中调用不同的工具。

    汇编器生成的是可重定位的目标文件,学过操作系统,我们知道,在源程序中地址是从0开始的,
    这是一个相对地址,而程序真正在内存中运行时的地址肯定不是从0开始的,而且在编写源代码的时候也不能知道程序的绝对地址,
    所以重定位能够将源代码的代码、变量等定位为内存具体地址。

    使用外部库:
    库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的。
    静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。
    静态库比较占用磁盘空间,而且程序不可以共享静态库。
    运行时也是比较占内存的,因为每个程序都包含了一份静态库。

    动态库(.so或.sa):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码,这样就减少了程序的体积。


    一般头文件或库文件的位置在系统默认的路径:
    /usr/include及其子目录底下的include文件夹
    /usr/local/include及其子目录底下的include文件夹
    /usr/lib
    /usr/local/lib
    /lib

    库的搜索路径遵循几个搜索原则:
    从左到右搜索-I -l指定的目录,如果在这些目录中找不到,那么gcc会从由环境 变量指定的目录进行查找。
    头文件的环境变量是C_INCLUDE_PATH,库的环境变量是LIBRARY_PATH.如果还是找不到,那么会从系统指定指定的目录进行搜索。


    Linux编译工具:gcc入门:
    https://cloud.tencent.com/developer/article/1155127

    ======================================================

    查找顺序:

    GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。
    编译链接时,首先会去指定的搜索路径中寻找库和头文件
    没找到的话,去环境变量中指定的地方去寻找;//LIBRARY_PATH C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
    最后再去系统默认的路径去寻找;


    linux gcc 编译时头文件和库文件搜索路径:
    https://www.cnblogs.com/lidabo/p/4950785.html

    linux下gcc默认搜索头文件及库文件的路径:
    https://blog.csdn.net/jingsihu/article/details/69389510

    ======================================================

  • 相关阅读:
    C++中虚继承的作用
    游戏程序设计学习初窥简单DirectX代码实现
    vue4.x更改默认端口 larry
    Visual studio 2010几个比较酷的功能
    Web前端编程:勿混淆NodeList与Array
    代码规范之署名
    一则中文文件名引起的问题
    C# WebService调用及数据并行处理
    2010年终总结
    关于DotNetNuke
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12846777.html
Copyright © 2011-2022 走看看