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

 

1.gcc编译的四个阶段

Linux学习笔记三 ——gcc编译、库_第1张图片

 

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

你可能感兴趣的:(Linux,笔记)