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下支持中文的教程,也没有现成的 ...
随机推荐
- 老猿学5G:3GPP 5G规范中的URI资源概念
☞ ░ 前往老猿Python博文目录 ░ 说明: 本文参考3GPP29.501<Principles and Guidelines for Services Definition>结合笔者 ...
- PyQt(Python+Qt)学习随笔:QTableView的gridStyle属性
老猿Python博文目录 老猿Python博客地址 概述 gridStyle属性用于控制视图数据网格的样式,此属性只有在showGrid属性为True时才有作用. gridStyle属性取值含义 gr ...
- 第15.14节 PyQt(Python+Qt)入门学习:Designer的Buttons按钮详解
一.引言 Qt Designer中的Buttons部件包括Push Button(常规按钮.一般称按钮).Tool Button(工具按钮).Radio Button(单选按钮).Check Box( ...
- java课后作业2019.11.04
一.编写一个程序,指定一个文件夹,能够自动计算出其总容量 1.代码 package HomeWork; import java.io.File; public class getFileDaxiao ...
- EF 查询外键对应的实例
EF 查询外键对应的实例 1. 查询时易遇到的情况: 能查询到外键值,但对应的外键实例为null. 解决方法: (1) 使用EF的include // 我的应用如下 // SampleResult ...
- activiti环境安装
使用Eclipse安装activiti插件的时候,没有安装成功,参考这边文章才成功,链接:https://jingyan.baidu.com/article/4dc408480d4201c8d846f ...
- mac中nvm的安装和使用
nvm 是 Mac 下的 node 管理工具,如果是管理 Windows 下的 node,可以使用 nvmw 或 nvm-windows . 一.若电脑中已安装node,需先卸载.参考学习的文档:ht ...
- Jmeter(3)返回内容乱码
一.创建jmeter实例测试百度接口返回 1.添加线程组 2.添加取样器 3.添加监听器 二.运行结果如下 返回结果中有乱码,原因是Jmeter取样器结果的编码默认为sampleresult.defa ...
- MISC-吹着贝斯扫二维码
题目 [安洵杯 2019]吹着贝斯扫二维码 解压附件,有36个文件和一个压缩包,压缩包带密码和备注 分析 文件类型 随便打开一个不明文件,是jpg图片啊(FF D8 FF) 改一个试试,有一个小块二维 ...
- mysql 8.0 MGR组复制配置
一.配置组复制的步骤 1.初始化数据目录 2.配置主服务器(primary) 3.配置辅助服务器(secondaries) 4.启动mysql实例 5.安装组复制插件(primary and seco ...