docker pull centos:centos7(拉取镜像)

docker run -itd --name centos-test centos:centos7 (运行容器)

docker exec -it centos-test /bin/bash (进入容器)

举例使用JNI调用c++ googleS2:

(安装编译c++版本googlS2依赖)

yum -y install cmake libgflags-dev libgoogle-glog-dev libgtest-dev libssl-dev(其中yum源应该是没有libssl-dev这个包)

(拷贝预先下载的本地文件到centos:

docker ps(查看容器名字centos-test)

docker inspect -f '{{.Id}}' centos-test(根据名字获得CONTAINER ID 完整ID:87880fa28f280a5a01712d4104d8ed31700363b10dd784aaafbb6abc6428aad5)

docker cp /本机绝对路径/googletest-release-1.8.0.tar.gz 87880fa28f280a5a01712d4104d8ed31700363b10dd784aaafbb6abc6428aad5:/root/googletest-release-1.8.0.tar.gz

)

tar xvzf googletest-release-1.8.0.tar.gz

mkdir googleS2

cd googleS2/

(安装git:

yum install git

git config --global user.name “名字”

git config --global user.email 邮箱)

git clone https://github.com/google/s2geometry.git

cd s2geometry/

mkdir build

cd build/

cmake -DGTEST_ROOT=/root/googletest-release-1.8.0/googletest/ ..

(出错,原因cmake版本太低,升级:

cd /opt/

(安装wget:

yum -y install wget)

wget https://cmake.org/files/v3.10/cmake-3.10.2-Linux-x86_64.tar.gz

yum remove cmake

tar zxvf cmake-3.10.2-Linux-x86_64.tar.gz

vi /etc/profile.d/cmake.sh

写入:

export CMAKE_HOME=/opt/cmake-3.10.2-Linux-x86_64

export PATH=$PATH:$CMAKE_HOME/bin

保存退出

source /etc/profile

cmake -version

可查看到最新的cmake版本

cd /root/googleS2/s2geometry/build/

cmake -DGTEST_ROOT=/root/googletest-release-1.8.0/googletest ..

(缺少g++编译器,安装:

yum install gcc

yum install gcc-c++

yum install make

)

cmake -DGTEST_ROOT=/root/googletest-release-1.8.0/googletest ..

(缺少openssl安装:

yum install openssl

yum install openssl-devel)

cmake -DGTEST_ROOT=/root/googletest-release-1.8.0/googletest ..

make

make test

sudo make install

centos7安装java1.8

yum install java-1.8.0-openjdk

yum install java-devel

update-alternatives --config java

之后就可以进行正常的JNI开发了。

vi LinuxJNI.java

public class LinuxJNI{
public native void sayHello(); static {
System.load("/绝对路径/libs2.so");//当libs2.so变更存放位置时需要明确指定,默认安装位置是/usr/local/lib/libs2.so,可以不指定
System.load("/root/googleS2/s2geometry/src/liblinuxjni.so");
}
public static void main(String[] args){
System.out.println("hello world");
LinuxJNI lj = new LinuxJNI();
lj.sayHello();
}
}

javac LinuxJNI.java

javah LinuxJNI(获得LinuxJNI.h)

vi LinuxJNI.cc

#include <iostream>
#include "LinuxJNI.h"
#include "s2/s2polyline.h"
#include "s2/s2latlng.h"
#include <vector> using namespace std; JNIEXPORT void JNICALL Java_LinuxJNI_sayHello (JNIEnv *, jobject){
cout << " hello from jni" << endl; S2LatLng latlng_one = S2LatLng::FromDegrees(39.965377,116.392767);
S2LatLng latlng_two = S2LatLng::FromDegrees(39.968699,116.400642);
S2LatLng latlng_three = S2LatLng::FromDegrees(39.968929,116.407616); S2LatLng line[] = {latlng_one,latlng_two,latlng_three};
const vector<S2LatLng> s2line(line,line+3);
S2Polyline s2Polyline = S2Polyline(s2line); //S2Polyline 相关方法使用
     ......
}

g++ -fPIC -D_REENTRANT -I/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/include -I/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/include/linux/ -std=c++11 -c LinuxJNI.cc

g++ -shared -o liblinuxjni.so LinuxJNI.o /usr/local/lib/libs2.so

objdump -x liblinuxjni.so | grep NEEDED (检查是否依赖libs2.so成功)

java LinuxJNI 查看运行结果。

docker安装CentOS7及JNI使用相关过程记录的更多相关文章

  1. Docker安装 - CentOS7环境

    Docker安装 - CentOS7环境 安装Docker 我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核 ...

  2. 一、docker安装CentOS7

    一.安装步骤 前提条件 Docker运行在CentOS7上,要求系统64位.系统内核版本为3.10以上. Docker是一个进程,一启动就两个进程,一个服务,一个守护进程.占用资源就非常少,启动速度非 ...

  3. Docker 安装(centos7下)

    下面链接为官方的安装方法(官方的是最好的): https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after- ...

  4. docker 安装centos7并SSH远程连接

    1.安装centos7 镜像 1.搜索并拉取centos镜像(默认最新镜像) docker search centos docker pull centos 2.建立本机对应docker-centos ...

  5. docker学习------记录centos7.5下docker安装更换国内源的处理过程

    一.centos7.5下更换阿里源 1.装好centos7.5镜像,将yum源更换为阿里源 第一步:刚出的centos7.5是解析不到阿里的东西的,所以找了台centos7.4,下载一些包 (1) 下 ...

  6. docker安装-centos7

    操作系统要求 要安装Docker,您需要64位版本的CentOS 7.步骤:   卸载旧版本 Docker的旧版本被称为docker或docker-engine . 如果这些已安装,请卸载它们以及关联 ...

  7. win系统下之docker安装centos7镜像

    1)    拉取镜像 输入命令docker pull centos:7 从仓库拉取centos7的镜像 2)    查看本地镜像 命令:docker images 可以查看已经把centos的镜像拉取 ...

  8. Docker安装CentOS7

    1. 拉取镜像 docker pull centos:centos7 2. 启动镜像创建容器 docker run -d -p 36622:22 -p 36680:80 --name centos7- ...

  9. docker安装centos7镜像

    拉取centos7镜像[root@localhost ~]# docker pull centos:71启动镜像centos7,如果不指定 /bin/bash,容器运行后会自动停止[root@loca ...

随机推荐

  1. Flink的状态与容错

    本文主要运行到Flink以下内容 检查点机制(CheckPoint) 状态管理器(StateBackend) 状态周期(StateTtlConfig) 关系 首先要将state和checkpoint概 ...

  2. Connections could not be acquired from the underlying database!

    Connections could not be acquired from the underlying database! 报错截图: 报错内容: Exception in thread &quo ...

  3. ValueError: the environment variable is longer than 32767 characters On Windows, an environment variable string ("name=value" string) is limited to 32,767 characters

    https://github.com/python/cpython/blob/aa1b8a168d8b8dc1dfc426364b7b664501302958/Lib/test/test_os.py ...

  4. java面向对象(二)构造函数和构造代码块

    面向对象 类成员 1.成员变量 属性 数值类型的基本数据类型默认值是 0 成员变量在任何方法中都能访问,和声明先后没有关系 2.成员函数 方法 3.定义方式 class 类名{成员变量:成员函数} / ...

  5. p2p nat 穿透原理

    nat 打洞穿透原理,需要服务端. 假设有A.B两个客户端和S一个服务器 Step 1 : A.B发送UDP请求给S,S知道了A.B在公网的IP和端口. Step 2: A从S中取B在公网的IP和端口 ...

  6. 原生js使用面向对象的方法开发选项卡实例教程

    本教程通过js面向对象的方法来封装一个选项卡的实例,在实例中讲解js的面向对象如何实现功能. 一般封装好的选项卡程序,只需要一个div元素即可.其它元素都是通过json数据来生成,所以封装好的选项卡实 ...

  7. DDD领域驱动设计:仓储

    1 前置阅读 在阅读本文章之前,你可以先阅读: 什么是DDD DDD的实体.值对象.聚合根的基类和接口:设计与实现 2 什么是仓储? 仓储封装了基础设施来提供查询和持久化聚合操作. 它们集中提供常见的 ...

  8. 项目管理/Bug管理/问题管理—Phabricator

    项目管理/Bug管理/问题管理-Phabricator 1.项目管理/Bug管理/问题管理工具 2.Phabricator 3.Docker 方式安装Phabricator 3.1Docker方式安装 ...

  9. juniper srx系列配置端口映射 转载

    http://www.cnblogs.com/pinpin/p/9895815.html

  10. OsgEarth开发笔记(一):Osg3.6.3+OsgEarth3.1+vs2019x64开发环境搭建(上)

    前言   OSG研究之后,做地理GIS显示了地球:<项目实战:Qt+OSG教育学科工具之地理三维星球>,这一文章是基于OSG做的,而基于OsgEarth是可以进一步对地球进行深度操作,所以 ...