Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1704216
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 嵌入式

2016-10-06 19:03:18

基本用法

解释说明

扩展用法

gcc XXX.c 或 gcc XXX.o

#生成可执行文件

#加-o表示起个别名:gcc XXX.c -o YYY 或gcc -o YYY XXX.c 或 gcc XXX.o -o YYY 或gcc -o YYY XXX.o

gcc -c XXX.c

#-c表示只编译不链接

#加-o表示起个别名:gcc -c XXX.c -o XXX.o或 gcc -o XXX.o -c XXX.c
#加-I用于增加不在同一路径下的头文件路径

gcc -shared -fPIC XXX.c -o libXXX.so

#生成动态链接库
-其实就是:
gcc -fPIC -c XXX.c + gcc -shared XXX.o -o libXXX.so
       #
在makefile中常用

#-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
#-shared 该选项指定生成动态连接库,不用该标志外部程序无法连接。

ar -cr libXXX.a XXX.o

#生成静态链接库

 

gcc –o main main.o libxxx.a(libxxx.so)

#静态链接库或动态链接库的使用
-或者:
gcc –o main main.o –L./ –lxxx
    #在makefile中常用。

    #
使用-l选项时,默认情况下编译器会先搜索libxxx.so文件,如果没有找到,继续搜索libxxx.a。
    #加-static表示在程序中链接静态链接库:gcc -static –o main main.o –L./–lxxx

#同样的,链接.c也是可以的:gcc–o main main.c libxxx.a(libxxx.so) 和gcc –o main main.c –L./ –lxxx 和 gcc -static –o main main.c –L./ –lxxx

 

 

 

gcc编译程序时,用到的 -I -L -l 之间的区别?举例说明:(选自:Makefile中 -I -L -l区别

gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld

#-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
#-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
#-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)

 

 

 

 


阅读(1663) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~