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

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

  • 相关阅读:
    MySQL约束笔记
    MySQL 存储过程入门
    数据库范式
    Hibernate 懒加载 错误----no session
    复选框 checkbox 选中事件
    Hibernate 三种状态变化 与 sql 语句的关系
    Spring 4 + Hibernate 4 下 getCurrentSession()的使用情况
    35个java代码性能优化总结
    为什么 Java中1000==1000为false而100==100为true?AND "2+2=5"?
    MyBatis对象关联关系----多对多的保存与查询
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12846777.html
Copyright © 2011-2022 走看看