gcc -shared -o libJava.so Java.o ./libdemo.a
学习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 -shared -o libJava.so Java.o ./libdemo.a相关推荐
- EVA QQ安装手册 - GCC/GNU/Linux Delphi/Window Java/Anywhere - C++博客
导读: 家里很早就安装了ubuntu 6, 也慢慢将各种windows下的常用工具换到linux的对应工具上了 这里推荐几个好的网站 http://www.ubuntu.org.cn的widi htt ...
- java 调用cpp_java jni 调用cpp文件中的方法 | 学步园
这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...
- 64位Eclipse运行时提示“Failed to load the JNI shared library \Java\jre6\bin\client\jvm.dll”的一个解决方案
由于开发环境改变,改用64位Juno 64位 SP1环境替换了原来的Juno 32位.结果启动Eclipse报错: "Failed to load the JNI shared librar ...
- Linux平台Java调用so库-JNI使用例子
1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...
- java linux so
1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...
- linux java调用so文件路径_Linux平台Java调用so库-JNI使用例子
1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...
- linux怎么在线安装gcc,Linux 在线安装软件 gcc在线安装的操作方法
Linux在线安装相关命令: yum install:全部安装 yum install :安装指定的程序包 yum groupinsall :安装程序组 yum -y update:升级所有包,改变软 ...
- JAVA程序通过JNI调用C/C++库
java程序如何调用c/c++库中的函数主要分为三个步骤: 1. 加载库文件. System.loadLibrary 2. 找到函数( java函数<----映射---->c函数 ) 3. ...
- 本地方法(JNI)——调用 java 方法
[0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...
最新文章
- 在线作图|微生物多样性分析——丰度等级曲线
- 什么是 Design System
- .Net高级技术笔记
- 从命令行及java程序运行MyBatis Generator 1.3.x生成MyBatis3.x代码
- Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题
- 字符串转为小数点,乘以一个数以后,转换为科学计数法,再把科学计数法转化为字符串
- 每天睡4小时上7门课
- qt5.10 for android 使用webview时qml 与html 中js的相互访问
- python适用范围_Python应用范围总结概览
- linux编程参数列表,Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...
- 获取类型的完全限定名
- javaweb简单源代码_Java Web轻松学39 - JSP核心原理
- 【两种方式】用python和ENVI画出高光谱遥感影像的3D立体图
- 启动程序时提示缺少mfc.dll
- 社会网络分析能干什么?
- python首字母大写
- linux决定文件大小的函数,Linux 通过lseek()来实现文件大小的设置
- 爬虫 -- 王者荣耀爬虫,爬取每个英雄的皮肤图片
- 计算任意文件夹大小 , 校验大文件的一致性 , 发抢红包程序
- JAVA父类引用指向子类的对象是什么意思?有什么作用?