gcc -shared -o libJava.so Java.o ./libdemo.a

学习GCC的参数,可以建议LZ这样做.
把参数先全去掉,从最简单的一步步开始,按照GCC的友好提示来弄:
比如:
#. step 1
  1. gcc Java.o
复制代码
缺省是生成a.out可执行文件的
(顺便提一下Java.o应该是gcc -c Java.c生成的吧,这个LZ清楚了这里就不多说了)
一来会提示一些的符号找不到; 二者应该会找提示找不到"main"函数入口;
第一个问题需要其这的符号: 想必就是libdemo.a啦,".a"对应windows下是".lib"文件,也是".o"文件的集合啦,内部集合

好多函数的实现.
#. step 2
  1. gcc Java.o ./libdemo.a
复制代码
现在找不到符号的问题是不是没了,但是"main"符号找不到编译器(实质是ld链接器)开始喊啦.
因为你没有定义"main"函数噢,所以你可以把它生成是共享库(如果导演就是这样安排的 ).
#. step 3
  1. gcc Java.o ./libdemo.a -shared
复制代码
其实在我印象中,编译动态库,很少不用"fPIC"参数的,具体为啥man里也说了,用多了就自然啦,根据GCC的人性化

提示,最好是这样.
#. step 3.1
  1. gcc Java.o ./libdemo.a -shared -fPIC
复制代码
黄天不复苦心人,此时正常情况下,GCC不会再刁难你啦(它不说话)就说明OK啦. ls 一下是不是有个"a.out"文件啦.
噢,文件名不帅噢,改个个性化的名字吧:
#. step 4
  1. gcc Java.o ./libdemo.a -shared -fPIC -o libJava.so
复制代码
  1. gcc -c Java.c ./libdemo.a -shared -fPIC -o libJava.so
复制代码
因为GCC的顺序是不限制的,因个人习好而定,这个排版和LZ的应该是一样的,经过如此演义过程,每个参数的意义

LZ应该有点感觉了吧
但是有个原则,按组摆放一块:
比如:
  1. gcc \
  2.    -o libJava.so       \ #. 显示指定目标文件名. 否则就是a.out啦.
  3.    -shared -fPIC     \ #. 编译共享库的参数(组定搭档). 否则就没有“main”报错喽.
  4.    a.o b.o c.o          \ #. 由原代码a.c b.c c.c编译出来的一堆东东集中在一块.
  5.    ./libdemo.a          \ #. 依赖其它的一些lib库.
  6.    -ldl -lpthread      \ #. 依赖的系统共享库 对应libdl.so, libpthread.so (这里是举个例了,当然你的程序可能不需要哈)
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值