您的位置:首页 > 编程语言 > Java开发

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

2017-04-18 11:39 375 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: