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下支持中文的教程,也没有现成的 ...
随机推荐
- windows下多Python环境指定pip安装模块到对应Python环境下
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿在windows下装了2套Python,一套是直接安装的Pytho ...
- Hive基本原理及配置Mysql作为Hive的默认数据库
Hive是什么? Hive是基于Hadoop之上的数据仓库: Hive是一种可以存储.查询.分析存储在hadoop中的大规模数据 Hive定义了简单的类SQL查询语言,成为HQL,它允许熟悉SQL的用 ...
- WPF中Logical Tree和Visual Tree的区别
The Logical TreeThe logical tree describes the relations between elements of the user interface. The ...
- 笔记-Cats Transport<已写题解>
笔记-Cats Transport Cats Transport 令 \(D_i=\sum_{j=1}^id_i\),\(T_i=t_i-D_{h_i}\). 为 \(T_i\) 从小到大排序,令 \ ...
- ACM训练赛:第20次
这次的题思维都很强,等之后的考试结束会集中精力重新训练一些思维题. A - A simple question CodeForces - 520B 思路: 直接看的话,很容易发现如果 \(n > ...
- sqli-labs less5-6(双查询注入)
less-5 双查询注入 利用count(), group by, floor(), rand()报错 双查询注入的原理参考博客 打开less-5 用union注入的流程进行发现页面不会有回显,所以u ...
- MySQL02-约束
1.DQL查询语句 1.1 排序查询 语法:order by 排序字段1 排序方式1 , 排序字段2 排序方式2... 排序方式: ASC:升序,默认的. DESC:降序. 注意: 如果有多个排序条 ...
- 【译】理解Rust中的Futures (一)
原文标题:Understanding Futures In Rust -- Part 1 原文链接:https://www.viget.com/articles/understanding-futur ...
- css进阶 00-准备
前言 css 进阶的主要内容如下. #1.css 非布局样式 html 元素的分类和特性 css 选择器 css 常见属性(非布局样式) #2.css 布局相关 css 布局属性和组合解析 常见布局方 ...
- Spring Data JPA 基础第二篇
主要调用工具类JpaUtils类 package cn.itcast.utils;import javax.persistence.EntityManager;import javax.persist ...