Linux常用基础(三)

Linux常用基础(三),第1张

概述1、gcc编译器   (1)简介     前期的GCC不过是GNU C Compiler的意思,仅仅用于C语言的编译,经过多年的发展,现在的GCC是GNU Compiler Collection的意思,并且目前支持多种编程语言的编译。   (2)gcc的编译过程     gcc的编译过程包括了四个过程,分别是预处理、编译、汇编和链接,如下所示:       1)预处理       主要是完成头文件

1、gcc编译器

  (1)简介

    前期的GCC不过是GNU C Compiler的意思,仅仅用于C语言的编译,经过多年的发展,现在的GCC是GNU Compiler Collection的意思,并且目前支持多种编程语言的编译。

  (2)gcc的编译过程

    gcc的编译过程包括了四个过程,分别是预处理、编译、汇编和链接,如下所示:

 

    1)预处理

      主要是完成头文件的展开,c文件中宏的替换展开,去掉有关的注释。

      命令:gcc -E myapp.c -o myapp.i

        -E:生成预处理的文件

        -o:生成目标文件

    2)编译

      预处理后的文件仍然是c文件,编译的过程是把c文件编译成汇编文件。

      命令:gcc -S myapp.i -o myapp.s

        -S:生成汇编文件

    3)汇编

      将汇编文件变成二进制文件。

      命令:gcc  -c myapp.s -o myapp.o

        -c:编译子程序

    4)链接

      将相关的函数库链接到目标文件中去,最终生成可执行文件。

      命令:gcc myapp.o -o myapp

  (3)其它命令参数

    1)查看gcc版本号:-v / --version

    2)指定头文件目录:-I + 目录

    3)编译时定义宏:-D

    4)编译优化:-On (n=0-3:当n为0不优化,当n为3优化级别最高)

    5)提示更多的警告信息:-Wall

    6)包含调试信息:-g (GDB调试需要加此参数)

 

2、静态库

  (1)命名规则

    1)lib + 库的名字 + .a

    2)例如:libmytest.a(库的名字为mytest)

  (2)制作步骤

    1)生成对应的.o文件,编译时添加-c参数

      命令:gcc mytest.c -c

    2)将生成的.o文件打包

      命令:ar rcs + 静态库的名字(libmytest.a)+ 生成的所有.o文件

  (3)发布和使用静态库

    1)将打包好的lib和头文件发布出去,头文件提供API接口的相关信息

    2)静态库使用方法

      命令1:gcc main.c -I + 头文件路径lib/libmytest.a -o myapp

      命令2:gcc main.c -I + 头文件 -L + 库的路径 -l + 库的名字 -o myapp

  (4)优缺点

    优点:

      1)发布程序的时候,不需要提供相应的库

      2)加载库的速度快

    缺点:

      1)库被打包到应用程序中,导致应用程序的体积很大

      2)一旦库发生了变化,则应用程序需要重新编译

 

3、共享库(动态库)

  (1)命名规则

    1)lib + 库的名字 + .so

    2)例如:libmytest.so

  (2)制作步骤

    1)生成与位置无关的代码(生成与位置无关的.o文件)

      命令:gcc -fPIC -c *.c -I + 头文件路径

    2)将.o打包成共享库(动态库)

      命令:gcc -shared -o libmyapp.so *.o -I 头文件路径

  (3)发布和使用共享库

    发布:将.so文件和头文件进行发布

    使用:

      命令1:gcc main.c lib/libmyapp.so -o myapp -I 头文件路径

      命令2:gcc main.c -I + 头文件路径 -L + 库的路径文件 -l + 库的名字 -o myapp

  (4)程序执行时动态库无法被加载的问题解决

    原因:环境变量中找不到动态库的路径,程序运行时链接不成功

    解决:

      1)将动态库拷贝到路径/lib中去(不允许使用)

      2)将动态库路径添加到额外的链接环境变量LD_liBRARY_PATH

        命令:export LD_liBRARY_PATH=./lib(动态库的路径)

      3)将LD_liBRARY_PATH永久改变

        修改~/.bashrc配置文件,在文件最后export

      4)通过修改动态连接器的配置文件

        1)需要找到动态链接器的配置文件

          命令:ls -l /etc/ld.so.conf

        2)动态库的路径写入到配置文件中

          命令:vim /etc/ld.so.conf

        3)将动态库的路径添加到最后一行,然后保存退出vim

        4)更新链接配置文件

          命令:sudo ldconfig -v

  (5)优缺点

    优点:

      1)应用程序的体积小

      2)动态库更新,不一定需要重新编译应用程序

    缺点:

      1)发布程序的时候,需要发布动态库给用户

      2)动态库并没有打包到应用程序中去,加载速度相对较慢

总结

以上是内存溢出为你收集整理的Linux常用基础(三)全部内容,希望文章能够帮你解决Linux常用基础(三)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1024180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存