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下支持中文的教程,也没有现成的 ...
随机推荐
- Python中数字按位取反的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Python中有个按位取反运算符:,但这个运算符并不是真正的按位取反,而是效果相当于原值乘以负一再减 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...
- css3实现立体魔方效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- WPF中Logical Tree和Visual Tree的区别
The Logical TreeThe logical tree describes the relations between elements of the user interface. The ...
- UOJ61. 【UR #5】怎样更有力气
题目链接 Statement 给定一棵 \(n\) 点树 \(T\) 和 \(m\) 个操作 v u w : 在 \(T\) 中 \(u,v\) 的最短路上所有点里面选出若干对(可以不选,可以重复), ...
- 题解 CF830D Singer House
\(\texttt{Solution}\) 首先考虑 \(\texttt{dp}\) 维护题目要求的深度为 \(i\), 每个节点最多经过一次的不同有向路径数量 \(f_i\). 明显的,只维护这个东 ...
- Java设计模式(一)——单例模式
简介 定义: 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例. 单例类拥有一个私有构造函数,确保用户无法通过 new 来直接实例化它.类中包含一个静态私有成员变量与静态公有的工厂方法, ...
- mysql 8.0忘记root密码
1.修改参数文件添加以下内容 skip-grant-tables 2.关闭数据库 [root@node01 ~]# /etc/init.d/mysqld8 stop Shutting down MyS ...
- ORA-29701: unable to connect to Cluster Synchronization Service
修改主机名后,has无法启动,将has启动之后,尝试ASMCA,出现如图提示: 再尝试登陆asm实例,出现日下提示: [oracle@edgzrip2-+ASM ~]$ sqlplus / as sy ...
- 如何用Python 制作词云-对1000首古诗做词云分析
公号:码农充电站pro 主页:https://codeshellme.github.io 今天来介绍一下如何使用 Python 制作词云. 词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视 ...