使用GCC开发动态库供java调用

1.开发环境
Ubuntu14.04 64位+gcc4.8.4+JDK

2.安装JDK
1).查看JDK的版本
$java -version
2).安装JDK
如何没有安装JDK,可以通过命令$javah 查看可安装的JDK包,选择一个安装(我系统上安装的是openjdk-7-jdk)
命令如下:
$sudo apt-get install openjdk-7-jdk

3.设置java环境变量
1).设置环境变量
$cd ~
$gedit .bashrc
在文件的尾部添加
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export CLASSPATH=.:..:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
保存文件后执行下面的命令使设置立即生效
$source .bashrc
2).测试环境变量
写一个java程序HelloWorld.java,编译
$javac HelloWorld.java
执行程序
$java HelloWorld

4.安装openssl(openssl-1.0.2h)
1).查看是否已经安装过openssl
$openssl version
如果已经安装过旧的版本,使用which openssl查看安装路径(我的系统安装在/usr/bin/openssl)
2).解压gz包
$tar -zxvf openssl-1.0.2h.tar.gz
查看README, 对于unix/linux,需要查看INSTALL文件, 打开INSTALL文件
$cd openssl-1.0.2h
如果已经安装了openssl, 则安装到已安装的目录下,否则安装到默认路径下(/usr/local/ssl),并且生成动态库(添加选项shared, 不添加该选项,在加载动态库时报链接错误)。
(备注:为了防止编写的程序使用valgrind(内存检测工具)报告如下信息,我们在安装OPENSSL时,配置选项添加-DPURIFY。
ERROR:Conditional jump or move depends on uninitialised value(s))
$./config --prefix=/usr/local --openssldir=/usr/local/openssl shared -DPURIFY
$make
$sudo make install

5.gcc开发动态库
假设动态库的导出函数的声明分别放在KeyGenerateTool.h和KeyGenerateTool.c中,则makefile的写法如下:
CC = gcc

libKeyGenerator.so:KeyGenerateTool.o apps.o
$(CC) KeyGenerateTool.o apps.o -o libKeyGenerator.so -L/usr/local/lib -ldl -lssl -lcrypto -lpthread -rdynamic -shared
KeyGenerateTool.o:KeyGenerateTool.c
$(CC) -c -fPIC KeyGenerateTool.c -I/usr/lib/jvm/jdk1.8.0_101/include
apps.o:apps.c
$(CC) -c -fPIC apps.c

clean:
rm -f *.o *~ *.so

6.valgrind检测内存泄露
检查内存泄露的命令:
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --log-file=./log.txt  ./main
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值