gcc -shared -o libJava.so Java.o ./libdemo.a
2015-10-10 14:06
218 查看
学习GCC的参数,可以建议LZ这样做.
把参数先全去掉,从最简单的一步步开始,按照GCC的友好提示来弄:
比如:
#. step 1
gcc Java.o
复制代码
缺省是生成a.out可执行文件的
(顺便提一下Java.o应该是gcc -c Java.c生成的吧,这个LZ清楚了这里就不多说了)
一来会提示一些的符号找不到; 二者应该会找提示找不到"main"函数入口;
第一个问题需要其这的符号: 想必就是libdemo.a啦,".a"对应windows下是".lib"文件,也是".o"文件的集合啦,内部集合
好多函数的实现.
#. step 2
gcc Java.o ./libdemo.a
复制代码
现在找不到符号的问题是不是没了,但是"main"符号找不到编译器(实质是ld链接器)开始喊啦.
因为你没有定义"main"函数噢,所以你可以把它生成是共享库(如果导演就是这样安排的
).
#. step 3
gcc Java.o ./libdemo.a -shared
复制代码
其实在我印象中,编译动态库,很少不用"fPIC"参数的,具体为啥man里也说了,用多了就自然啦,根据GCC的人性化
提示,最好是这样.
#. step 3.1
gcc Java.o ./libdemo.a -shared -fPIC
复制代码
黄天不复苦心人,此时正常情况下,GCC不会再刁难你啦(它不说话)就说明OK啦. ls 一下是不是有个"a.out"文件啦.
噢,文件名不帅噢,改个个性化的名字吧:
#. step 4
gcc Java.o ./libdemo.a -shared -fPIC -o libJava.so
复制代码
gcc -c Java.c ./libdemo.a -shared -fPIC -o libJava.so
复制代码
因为GCC的顺序是不限制的,因个人习好而定,这个排版和LZ的应该是一样的,经过如此演义过程,每个参数的意义
LZ应该有点感觉了吧
但是有个原则,按组摆放一块:
比如:
gcc \
-o libJava.so \ #. 显示指定目标文件名. 否则就是a.out啦.
-shared -fPIC \ #. 编译共享库的参数(组定搭档). 否则就没有“main”报错喽.
a.o b.o c.o \ #. 由原代码a.c b.c c.c编译出来的一堆东东集中在一块.
./libdemo.a \ #. 依赖其它的一些lib库.
-ldl -lpthread \ #. 依赖的系统共享库 对应libdl.so, libpthread.so (这里是举个例了,当然你的程序可能不需要哈)
复制代码
把参数先全去掉,从最简单的一步步开始,按照GCC的友好提示来弄:
比如:
#. step 1
gcc Java.o
复制代码
缺省是生成a.out可执行文件的
(顺便提一下Java.o应该是gcc -c Java.c生成的吧,这个LZ清楚了这里就不多说了)
一来会提示一些的符号找不到; 二者应该会找提示找不到"main"函数入口;
第一个问题需要其这的符号: 想必就是libdemo.a啦,".a"对应windows下是".lib"文件,也是".o"文件的集合啦,内部集合
好多函数的实现.
#. step 2
gcc Java.o ./libdemo.a
复制代码
现在找不到符号的问题是不是没了,但是"main"符号找不到编译器(实质是ld链接器)开始喊啦.
因为你没有定义"main"函数噢,所以你可以把它生成是共享库(如果导演就是这样安排的
).
#. step 3
gcc Java.o ./libdemo.a -shared
复制代码
其实在我印象中,编译动态库,很少不用"fPIC"参数的,具体为啥man里也说了,用多了就自然啦,根据GCC的人性化
提示,最好是这样.
#. step 3.1
gcc Java.o ./libdemo.a -shared -fPIC
复制代码
黄天不复苦心人,此时正常情况下,GCC不会再刁难你啦(它不说话)就说明OK啦. ls 一下是不是有个"a.out"文件啦.
噢,文件名不帅噢,改个个性化的名字吧:
#. step 4
gcc Java.o ./libdemo.a -shared -fPIC -o libJava.so
复制代码
gcc -c Java.c ./libdemo.a -shared -fPIC -o libJava.so
复制代码
因为GCC的顺序是不限制的,因个人习好而定,这个排版和LZ的应该是一样的,经过如此演义过程,每个参数的意义
LZ应该有点感觉了吧
但是有个原则,按组摆放一块:
比如:
gcc \
-o libJava.so \ #. 显示指定目标文件名. 否则就是a.out啦.
-shared -fPIC \ #. 编译共享库的参数(组定搭档). 否则就没有“main”报错喽.
a.o b.o c.o \ #. 由原代码a.c b.c c.c编译出来的一堆东东集中在一块.
./libdemo.a \ #. 依赖其它的一些lib库.
-ldl -lpthread \ #. 依赖的系统共享库 对应libdl.so, libpthread.so (这里是举个例了,当然你的程序可能不需要哈)
复制代码
相关文章推荐
- Java基础知识强化之集合框架笔记68:Collections类概述和成员方法(备注:Collection 和 Collections区别)
- java.lang.StringIndexOutOfBoundsException: String index out of range: 0错误的原因 3ff0
- max min
- 三个实例演示 Java Thread Dump 日志分析
- 【eclipse下使用git上传(下载)代码至(从)github】
- Spring事务配置的五种方式
- java中的内部类总结
- Java核心技术第5章(4)
- java如何实现的简单猜数字游戏代码
- 使用NetBeans连接SVN管理代码的窍门
- springMVC教程中级(五)统一异常处理
- java入门第一天 基本介绍 环境配置 小小测试(上)
- springmvc 中controller与jsp传值
- Java基础知识强化之集合框架笔记65:Map集合之集合多层嵌套的数据分析
- Eclipse 插件开发遇到问题心得总结
- 使用 Spring 3 来创建 RESTful Web Services
- Mockito:一个强大的用于 Java 开发的模拟测试框架
- Java泛型的逆变
- Java泛型的协变
- Java泛型的基本使用