gcc 学习笔记

#gcc(常见)

      -v / --v / --version  查看gcc版本号

      -I目录  指定头文件的目录,-I和目录之间没有空格

      -c  只编译,生成.o文件(二进制文件),不进行连接

-g  调试

-On其中n=0~3   编译优化,n越大优化得越多

-Wall  提示更多的警告信息

-D宏 编译时定义宏,-D宏之间没有空格

  在编译时加上-DMYDEBUG,则printf(“”, a)就不会被s编译;

  不加-DMYDEBUG就会出现

  常用于调试

-E   生成预处理(过滤注释,展开头文件,宏替换)文件,后缀一般为.i

-S   生成汇编文件,后缀名为.s

 

 

#

nm  查看目标文件中的符号(全局函数,全局变量等)

objcpy

objdump -dSsx 目标文件(a.out) > 重定向的一个新文件   反汇编

readelf  

 

#静态库和共享库(动态库)

      创建静态库步骤(使用命令ar)

(1)先生成.o文件

(2)格式:ar 参数 库名 .o文件(eg: ar rcs libmycalc.a *.o)

要使用这个静态库时,只需在自己定义一个头文件,里面包含着库里的函数

      创建共享库(动态库)步骤:

(1)使用-fPIC或-fpic创建目标文件,-fPIC或-fpic表示位置无关代码(跳转指令是使用相对地址(当前地址+偏移量),而不使用绝对地址)

(2)

eg: 基础:(1)gcc  -fpic  -c  a.c

gcc  -fpic  -c  a.c

(2)gcc -shared -Wl  -o libmycal.so.1.10  a.o b.o

ldd命令

使用(加载)这个共享库:

  1. 拷贝自己制作的共享库到/lib或者/usr/lib
  2. 临时设置LD_LIBRARY_PATH,

“export LD_LIBRARY_PATH =$ LD_LIBRARY_PATH:库路径”

3.永久设置,把“export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:库路径”设置到~/.bashrc或者/etc/profile中

4. 设置/etc/ld.so.conf,把库所在的路径追加到这个文件里,再刷新一下(刷新命令sudo ldconfig -v)

 

      就业班:(1)gcc  -fpic  -c  a.c

gcc  -fpic  -c  a.c

(2) gcc -shared -Wl,-soname,libmycal.so.1 -o libmycal.so.1.10 *.o

Real name: libmycal.so.1, 要想在目录中显示出来,需要设置/etc/ld.so.conf,把库所在的路径追加到这个文件里,再刷新;

Soname: libmycal.so.1.10

Linkname: libmycal.so(需要手动创建:ln -s soname linkname)

 

posted @ 2016-11-01 20:00  留下的只是回忆  阅读(125)  评论(0)    收藏  举报