Netty tcnative boringssl windows 32-bit 编译
1 问题
在使用Netty SSL时,我们往往会采用netty-tcnative-boringssl组件。但是netty-tcnative-boringssl在Windows上仅有64位版本的,没有32版本的。由于项目需要用于32位的,所以自己编译了一下。
下面详细记录编译的步骤。
2 环境
- VS2017 社区版。
- Win10 SDK 10.0.17763.0
- Java 8 201 32位
- netty-tcnative-parent 2.0.34
3 步骤
3.1 下载源码
- 使用2.0.34版本,这是近期的稳定版本。下载地址:
- https://codeload.github.com/netty/netty-tcnative/zip/netty-tcnative-parent-2.0.34.Final
- 解压,并进入netty-tcnative-parent-2.0.34.Final目录。
3.2 JAVA_HOME
将环境变量 JAVA_HOME 指向 Java 8 32 位目录。
3.3 修改pom.xml
位置:./pom.xml
注释掉不要的模块,编译速度会快很多,如下:
- <modules>
- <module>boringssl-static</module>
- <!-- <module>openssl-dynamic</module>
- <module>openssl-static</module>
- <module>libressl-static</module> -->
- </modules>
- <archBits>64</archBits>
修改为:
- <archBits>32</archBits>
这个配置会影响APR组件的平台版本。
- <property name="tcnativeManifest" value="META-INF/native/${tcnative.snippet};processor=${os.detected.arch}" />-
修改为:
- <condition property="osgi.processor" value="x86" else="${os.detected.arch}">
- <equals arg1="${os.detected.arch}" arg2="x86_32"/>
- </condition>
- <property name="tcnativeManifest" value="META-INF/native/${tcnative.snippet};processor=${osgi.processor}"/>
这个修改的目的是生成适合OSGi环境使用的Bundle-NativeCode配置。不做这个修改的话,在OSGi环境下dll文件文件会找不到。
3.4 修改vs2010模板
位置:./vs2010.vcxproj.static.template
- <PropertyGroup Label="Globals">
- <ProjectName>netty_tcnative</ProjectName>
- <RootNamespace>netty_tcnative</RootNamespace>
- <ProjectGuid>{42EB387C-0D16-471E-8859-C2CF31F8094D}</ProjectGuid>
- </PropertyGroup>
修改为:
- <PropertyGroup Label="Globals">
- <ProjectName>netty_tcnative</ProjectName>
- <RootNamespace>netty_tcnative</RootNamespace>
- <ProjectGuid>{42EB387C-0D16-471E-8859-C2CF31F8094D}</ProjectGuid>
- <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <PlatformToolset>v140</PlatformToolset>
修改为:
- <PlatformToolset>v141</PlatformToolset>
这两项修改是让vs2010.vcxproj项目跟编译环境相匹配。
3.5 修改c文件
位置:./openssl-dynamic/src/main/c/jnilib.c
- #ifndef TCN_BUILD_STATIC
- JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
- return JNI_OnLoad_netty_tcnative0(vm, reserved);
- }
- JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved) {
- JNI_OnUnload_netty_tcnative0(vm, reserved);
- }
修改为:
- #ifndef TCN_BUILD_STATIC
- JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
- return JNI_OnLoad_netty_tcnative0(vm, reserved);
- }
- JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved) {
- JNI_OnUnload_netty_tcnative0(vm, reserved);
- }
不做这个修改的话,会报链接错误。
3.6 下载 boringssl源码
- git clone https://boringssl.googlesource.com/boringssl
由于代码来自googlesource,所以需要科*上网。将boringssl的源码放到./boringssl-static/target目录下。
3.7 执行
- # 进入到32位编译环境
- call "D:\Program1\vs\2017-community\VC\Auxiliary\Build\vcvars32.bat"
- # 打包
- mvn package –X
4 小结
编译过程中由于环境的不同,可能会出现各种问题。遇到问题时,耐心一些,参考错误日志,一个一个地解决就可以了。
5 参考资料
- Forked Tomcat Native-How to build
- netty-tcnative issues
- Compiling netty-tcnative dll for Windows 32-bit not working
- Compiling statically linked netty-tcnative fails with mismatch against jni.h from JDK
- Building the Tomcat Native Connector binaries for Windows
6 附件
为方便大家使用,本文附带了一个编译好的文件。如下:
Netty tcnative boringssl windows 32-bit 编译的更多相关文章
- [转]QGis2.9在windows下的编译以及二次开发包下载
今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)
后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...
- Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)
Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...
- 原创 C++应用程序在Windows下的编译、链接:第一部分 概述
本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...
- 【FFmpeg】Windows下FFmpeg编译
由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...
- (Delphi) Windows 32 API程序设计目录
这里所有程序均使用Delphi调用Windows 32 API方式实现,并不是使用VCL已经封装好的类实现的! (一)第一个窗口程序 01 创建第一个窗口.
- Libevent windows/linux下编译
1.windows下: 编译环境: windows xp sp3 + vs2010 (1) 解压libevent-2.0.21-stable.tar.gz到D:\libevent-2.0.21- ...
- 开源的excel读取库libxls在windows下的编译,且支持中文,全网首发
转载请注明出处:http://www.cnblogs.com/superbi/p/5482516.html 到目前为止,网络和官网上并没有关于libxls在windows下支持中文的教程,也没有现成的 ...
随机推荐
- PyQt学习随笔:Qt事件类QEvent详解
QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...
- 关于将Linux中默认的OpenJDK替换为JDK的方法
首先下载需要的jdk安装包,后缀建议.tar.gz,本文中以jdk-8u212-linux-x64.tar.gz为例,地址就在oracle官网. 将安装包下载到linux环境后,使用命令tar -xz ...
- python——sklearn完整例子整理示范(有监督,逻辑回归范例)(原创)
sklearn使用方法,包括从制作数据集,拆分数据集,调用模型,保存加载模型,分析结果,可视化结果 1 import pandas as pd 2 import numpy as np 3 from ...
- Go语言的context包从放弃到入门
目录 一.Context包到底是干嘛用的 二.主协程退出通知子协程示例演示 主协程通知子协程退出 主协程通知有子协程,子协程又有多个子协程 三.Context包的核心接口和方法 context接口 e ...
- Power BI八年回望记
本人从事BI,数据仓库领域相关工作15个年头,这15年目睹了这个方向从火爆到逐渐被大数据领域不断吞食.中间零散关注Power BI好长时间,也算目睹了它的成长. 那天在网络上搜索power bi,无意 ...
- Java集合源码分析(六)——ConcurrentHashMap
目录 简介 源码分析 父类 接口 字段 内部类 1.链表节点结构 2.树根结构 3.树节点结构 方法 1.构造方法 2.基本并发方法 3.初始化表数组的操作 4.修改添加元素 5.统计元素数量 6.扩 ...
- S3C2440从NAND Flash启动和NOR FLASH启动的问题
1.为什么NAND FLASH不能直接运行程序 NAND FLASH本身是连接到了控制器上而不是系统总线上.CPU运行机制为:CPU启动后是要取指令执行的,如果是SROM.NOR FLASH ...
- 20201203-6 设置excel样式【】
1-1 1 import os 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alig ...
- SpringBoot2.x集成Quartz实现定时任务管理(持久化到数据库)
1. Quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目. Quartz是一个完全由Java编写的开源作业调度框架,为在Java应 ...
- ubuntu 18 安装xgboost GPU版本
综合上述两个帖子: https://www.cnblogs.com/huadongw/p/6161145.html https://blog.csdn.net/u011587516/article/d ...