Linux学习笔记三 ——gcc编译、库

10 篇文章 0 订阅

 

1.gcc编译的四个阶段

 

2.gcc编译参数

               gcc  xxx.c   -o    xxx  ——  将xxx文件直接生成可执行文件     

 

              注意:.c文件中包含的头文件若不是系统文件,而是自己写的,则应该放在.c文件同级目录下,否则:

                          gcc   xxx.c   -o     xxx   -I     指定头文件或目录  ——   指定头文件目录后再编辑文件

                          gcc   xxx.c   -o     xxx   -D   宏名字   ——    编译时定义宏

 

               gcc  xxx.c   -o    xxx   -O1/2/3 ——  将程序优化后再编译文件

               gcc  xxx.c   -o    xxx   -Wall     ——  编译文件时提示警告信息;

               gcc  xxx.c   -o    xxx   -g  ——       在可执行文件里添加调试信息

 

3.静态库

    静态库名字

                   lib  +  库名  +  .a           如libmytest.a

    制作步骤

                   (1)生成对应的.o文件;

                   (2)将生成的.o文件打包( ar   rcs   +   静态库名字(libmytest.a)  +   生成的所有的.o)

                   (3)发布和使用静态库

                                   包括静态库和头文件

 

                          gcc   xxx.c   -c    xxx.o   -L     库文件或目录  ——   指定库目录或文件

                          gcc   xxx.c   -c    xxx.o   -l    库名字(去掉lib和.a)   ——   指定库名字

 

     静态库优点:

                     1.包含库的应用程序发布时,不需要提供对应库;

                     2.加载库的速度快;

    静态库缺点:

                     1.库打包到应用程序中,导致程序体积大;

                     2.库发生改变时,需要重新编译程序。

 

4.动态库

                   lib  +  库名  +  .so           如libmytest.so

    制作步骤:

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

                          gcc -fPIC  xxx.c   -c    xxx.o     

                   2.将.o打包成共享库

                          gcc  -shared  -o 共享库名字.so   所有.o文件

                   3.使用动态库

                           1)跟静态库类似

                           2)gcc    main.c    libMytest.so     -o     main.o

       

注:若使用动态库,在执行程序报错:error   loading  shared  libraries:libMycalc.so: cannot  open  shared  object  file : No such file or directory时,可以采取以下三种措施:

                  第一种(暂时性、测试使用):

                          export  LD_LIBRARY_PATH=   +    包含动态库的目录     ——     将目录加入lib目录

                  第二种(不常用):

                          (1) 在家目录中打开.bashrc文件,然后将以下命令写入文件中的最后一行

                          #export  LD_LIBRARY_PATH=   +    包含动态库的目录(绝对路径)

                          (2)重启终端

                                                    sudo  ldconfig

                  第三种:

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

                                                    vi        /etc/ld.so.conf

                         (2)动态库的路径写道配置文件中

                         (3)更新

                                                    sudo  ldconfig

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值