gcc编译c语言,非Makefile形式 输出 .o/.so/可执行文件

gcc (选项) (参数)

选项:

-o:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。

-fPIC :  该选项用于生成位置无关的代码
-shared :  将-fPIC生成的位置无关的代码作为动态库,一般情况下,-fPIC和-shared都是一起使用的。生成SO文件,共享库

参数:需要编译的文件

其中选项和参数位置可调换

一.基础使用方法

主函数所在文件include其他文件时 gcc编译时不需要列出已经include的文件,include可以是*.h,也可以是*.c,但最好不要include*.c。

1.如果main()所在文件main.c include所有*.c  编译可用

gcc -o test main.c

2.如果main()所在文件main.c 只include a.h, b.h, c.h  ,则编译需要用a/b/c .h对应的.c一起编译

gcc -o test main.c a.c b.c c.c

3.如果没有include只有extern,extern的函数或变量在a.c中编译要加入a.c

gcc -o test main.c a.c

需要说明的是:gcc编译不需要显式的+ ''*.h''文件,会自动根据 ''*.c''和include ''*.h''的路径 自动寻找对应的"*.h"

可参考http://www.cnblogs.com/zhangfeionline/p/5861721.html

两种多文件编译方式

a.如上所写,gcc中列出多个源文件一起编译

b.单个文件分别编译为*.o,再将*.o连接

gcc -c testfun.c    #将testfun.c编译成testfun.o
gcc -c test.c       #将test.c编译成test.o
gcc -o testfun.o test.o -o test    #将testfun.o和test.o链接成test

参考http://man.linuxde.net/gcc

二.编译生成动态连接库.so

其中jdi.o为待编译文件,当然也可以是jdi.o的源文件jdi.c直接编译为jdi.so

注意jdi.c编译为jdi.o时也需要 -fPIC

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值