码迷,mamicode.com
首页 > 其他好文 > 详细

经典!GCC常用的操作选项

时间:2014-12-11 15:57:22      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:gcc   linux   

gcc 简单讲解和常用参数解析
.a  静态库 (archive)  
.c  C源代码(需要编译预处理)  
.h  C源代码头文件    
.i  C源代码(不需编译预处理)
.o  对象文件       
.s  汇编语言代码
.so 动态库
 
$gcc -g -Wall hello.c -o hello 
-Wall   开启编译器几乎所有常用的警告
-g  表示在生成的目标文件中带调试信息 
-o  后面为指定生产的机器码的文件名
 
$ gcc -Wall hello.c hello_fn.c -o newhello 
编译多个源文件,且在同一目录
 
$ gcc -Wall calc.c /usr/lib/libm.a -o calc 
/usr/lib/libm.a 静态库的位置,及库名;也可写成下面格式
 
$ gcc -Wall calc.c -lm -o calc
-lm 等价  /usr/lib/libm.a 或 搜索路径 libm.so libm.a
-lNAME  等价搜索路径的 libNAME.a 或 libNAME.so
 
$ gcc -E hellou.c -o hellou.i  
-E  指示编译器只进行编译预处理
 
$ gcc -S hellou.c      
-S  指示编译器生成汇编语言代码然后结束
 
$ gcc -c -Wall first.c second.c    
-c  只生成 .o 的对象文件
 
$ ar -r libhello.a first.o second.o
-r  可以创建一个新库并将对象文件插入
 
$ gcc -c -Wall -fpic sh1.c sh2.c   
-fpic   使生成的对象模块采用浮动的(可重定位的)地址。
pic 代表“位置无关代码”(position independent code)。
 
$ gcc -Wall -shared sh1.o sh1.o -o Esh.so  
-shared 指定生成动态连接库,linux专有
 
$ gcc -Wall -fpic -shared sh1.c sh1.c -o Esh.so
 
头文件默认路径:/usr/local/include/ 和 /usr/include/
库文件默认路径:/usr/local/lib/ 和 /usr/lib/
-Ldir   添加动态、静态库的搜索路径(dir),非系统默认库必须在命令中指出库名
-Idir   添加头文件的搜索路径(dir),头文件无需在命令中指出,头文件可以任意移动!(详解查预编译)
(链接库,一:-Ldir  libNAME.so 或 libNAME.a;二:dir/libNAME.so 或 dir/libNAME.a)
-I- 就是取消前一个参数的功能,所以一般在-Idir之后使用
-static 此选项将禁止使用动态库。
 
$gcc -g -Wall -I/usr/local/include/python2.5/ /home/afa/lib/python2.5.so EmbedFunc.c -shared -o EmbedFunc.so
 
$gcc thread.c -o thread -lpthread  
libpthread.a不是 Linux 系统默认的库,使用时需加库命。
BRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。
当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,
不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了。
注意  调用动态库的时候有几个问题会经常碰到,有时,明明已经将库的头文件所在目录通过 “-I” include进来了,
库所在文件通过 “-L”参数引导,并指定了“-l”的库名,但通过ldd命令察看时,就是死活找不到你指定链接的so文件,
这时你要作的就是通过修改LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib
export BRARY_PATH=$LD_LIBRARY_PATH:./lib
通常这样做就可以解决库无法链接的问题了。

 

经典!GCC常用的操作选项

标签:gcc   linux   

原文地址:http://blog.csdn.net/nyist327/article/details/41866293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!