学习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 (这里是举个例了,当然你的程序可能不需要哈)

复制代码

gcc -shared -o libJava.so Java.o ./libdemo.a相关推荐

  1. EVA QQ安装手册 - GCC/GNU/Linux Delphi/Window Java/Anywhere - C++博客

    导读: 家里很早就安装了ubuntu 6, 也慢慢将各种windows下的常用工具换到linux的对应工具上了 这里推荐几个好的网站 http://www.ubuntu.org.cn的widi htt ...

  2. java 调用cpp_java jni 调用cpp文件中的方法 | 学步园

    这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...

  3. 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 ...

  4. Linux平台Java调用so库-JNI使用例子

    1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...

  5. java linux so

    1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...

  6. linux java调用so文件路径_Linux平台Java调用so库-JNI使用例子

    1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...

  7. linux怎么在线安装gcc,Linux 在线安装软件 gcc在线安装的操作方法

    Linux在线安装相关命令: yum install:全部安装 yum install :安装指定的程序包 yum groupinsall :安装程序组 yum -y update:升级所有包,改变软 ...

  8. JAVA程序通过JNI调用C/C++库

    java程序如何调用c/c++库中的函数主要分为三个步骤: 1. 加载库文件. System.loadLibrary 2. 找到函数( java函数<----映射---->c函数 ) 3. ...

  9. 本地方法(JNI)——调用 java 方法

    [0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...

最新文章

  1. 在线作图|微生物多样性分析——丰度等级曲线
  2. 什么是 Design System
  3. .Net高级技术笔记
  4. 从命令行及java程序运行MyBatis Generator 1.3.x生成MyBatis3.x代码
  5. Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题
  6. 字符串转为小数点,乘以一个数以后,转换为科学计数法,再把科学计数法转化为字符串
  7. 每天睡4小时上7门课
  8. qt5.10 for android 使用webview时qml 与html 中js的相互访问
  9. python适用范围_Python应用范围总结概览
  10. linux编程参数列表,Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...
  11. 获取类型的完全限定名
  12. javaweb简单源代码_Java Web轻松学39 - JSP核心原理
  13. 【两种方式】用python和ENVI画出高光谱遥感影像的3D立体图
  14. 启动程序时提示缺少mfc.dll
  15. 社会网络分析能干什么?
  16. python首字母大写
  17. linux决定文件大小的函数,Linux 通过lseek()来实现文件大小的设置
  18. 爬虫 -- 王者荣耀爬虫,爬取每个英雄的皮肤图片
  19. 计算任意文件夹大小 , 校验大文件的一致性 , 发抢红包程序
  20. JAVA父类引用指向子类的对象是什么意思?有什么作用?

热门文章

  1. 百度AI评测:红酒识别
  2. 基于低代码开发平台实现集团战略督办管理系统
  3. 怎么使用大疆无人机建模?
  4. uni-app离线打包遇到的坑
  5. Python下载网易云音乐歌单
  6. 重力感应贪吃蛇(C51 MPU6050 8*8LED点阵)
  7. 用计算机测声音频率,什么软件可以测声音频率?
  8. 排球分组循环交叉编排_【排球】二青会体校组男子排球(B组)预赛落幕 海口队顺利晋级决赛...
  9. spss数据处理--数据检查
  10. 社群裂变工具有哪些?怎么用?微信如何引流客源呢?