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版本,这是近期的稳定版本。下载地址:
  1. 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

注释掉不要的模块,编译速度会快很多,如下:

  1. <modules>
  2.  
  3. <module>boringssl-static</module>
  4.  
  5. <!-- <module>openssl-dynamic</module>
  6.  
  7. <module>openssl-static</module>
  8.  
  9. <module>libressl-static</module> -->
  10.  
  11. </modules>


  1. <archBits>64</archBits>

修改为:

  1. <archBits>32</archBits>

  这个配置会影响APR组件的平台版本。

  1. <property name="tcnativeManifest" value="META-INF/native/${tcnative.snippet};processor=${os.detected.arch}" />-

修改为:

  1. <condition property="osgi.processor" value="x86" else="${os.detected.arch}">
  2. <equals arg1="${os.detected.arch}" arg2="x86_32"/>
  3. </condition>
  4. <property name="tcnativeManifest" value="META-INF/native/${tcnative.snippet};processor=${osgi.processor}"/>

 这个修改的目的是生成适合OSGi环境使用的Bundle-NativeCode配置。不做这个修改的话,在OSGi环境下dll文件文件会找不到。

3.4 修改vs2010模板

位置:./vs2010.vcxproj.static.template

  1. <PropertyGroup Label="Globals">
  2.  
  3. <ProjectName>netty_tcnative</ProjectName>
  4.  
  5. <RootNamespace>netty_tcnative</RootNamespace>
  6.  
  7. <ProjectGuid>{42EB387C-0D16-471E-8859-C2CF31F8094D}</ProjectGuid>
  8.  
  9. </PropertyGroup>

修改为:

  1. <PropertyGroup Label="Globals">
  2.  
  3.    <ProjectName>netty_tcnative</ProjectName>
  4.  
  5. <RootNamespace>netty_tcnative</RootNamespace>
  6.  
  7. <ProjectGuid>{42EB387C-0D16-471E-8859-C2CF31F8094D}</ProjectGuid>
  8.  
  9. <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
  10.  
  11. </PropertyGroup>
  1. <PlatformToolset>v140</PlatformToolset>

修改为:

  1. <PlatformToolset>v141</PlatformToolset>

  这两项修改是让vs2010.vcxproj项目跟编译环境相匹配。

3.5 修改c文件

位置:./openssl-dynamic/src/main/c/jnilib.c

  1. #ifndef TCN_BUILD_STATIC
  2.  
  3. JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
  4.  
  5. return JNI_OnLoad_netty_tcnative0(vm, reserved);
  6.  
  7. }
  8.  
  9. JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved) {
  10.  
  11. JNI_OnUnload_netty_tcnative0(vm, reserved);
  12.  
  13. }

修改为:

  1. #ifndef TCN_BUILD_STATIC
  2. JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
  3. return JNI_OnLoad_netty_tcnative0(vm, reserved);
  4. }
  5. JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved) {
  6. JNI_OnUnload_netty_tcnative0(vm, reserved);
  7. }

  不做这个修改的话,会报链接错误。

3.6 下载 boringssl源码

  1. git clone https://boringssl.googlesource.com/boringssl

  由于代码来自googlesource,所以需要科*上网。将boringssl的源码放到./boringssl-static/target目录下。

3.7 执行

  1. # 进入到32位编译环境
  2.  
  3. call "D:\Program1\vs\2017-community\VC\Auxiliary\Build\vcvars32.bat"
  4.  
  5. # 打包
  6.  
  7. mvn package X

4 小结

  编译过程中由于环境的不同,可能会出现各种问题。遇到问题时,耐心一些,参考错误日志,一个一个地解决就可以了。

5 参考资料

6 附件

  为方便大家使用,本文附带了一个编译好的文件。如下:

Netty tcnative boringssl windows 32-bit 编译的更多相关文章

  1. [转]QGis2.9在windows下的编译以及二次开发包下载

    今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...

  2. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)

    后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...

  3. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索

    时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...

  4. Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)

    Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...

  5. 原创 C++应用程序在Windows下的编译、链接:第一部分 概述

    本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...

  6. 【FFmpeg】Windows下FFmpeg编译

    由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...

  7. (Delphi) Windows 32 API程序设计目录

    这里所有程序均使用Delphi调用Windows 32 API方式实现,并不是使用VCL已经封装好的类实现的! (一)第一个窗口程序 01 创建第一个窗口.

  8. Libevent windows/linux下编译

    1.windows下: 编译环境: windows xp sp3 + vs2010 (1)    解压libevent-2.0.21-stable.tar.gz到D:\libevent-2.0.21- ...

  9. 开源的excel读取库libxls在windows下的编译,且支持中文,全网首发

    转载请注明出处:http://www.cnblogs.com/superbi/p/5482516.html 到目前为止,网络和官网上并没有关于libxls在windows下支持中文的教程,也没有现成的 ...

随机推荐

  1. PyQt学习随笔:Qt事件类QEvent详解

    QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...

  2. 关于将Linux中默认的OpenJDK替换为JDK的方法

    首先下载需要的jdk安装包,后缀建议.tar.gz,本文中以jdk-8u212-linux-x64.tar.gz为例,地址就在oracle官网. 将安装包下载到linux环境后,使用命令tar -xz ...

  3. python——sklearn完整例子整理示范(有监督,逻辑回归范例)(原创)

    sklearn使用方法,包括从制作数据集,拆分数据集,调用模型,保存加载模型,分析结果,可视化结果 1 import pandas as pd 2 import numpy as np 3 from ...

  4. Go语言的context包从放弃到入门

    目录 一.Context包到底是干嘛用的 二.主协程退出通知子协程示例演示 主协程通知子协程退出 主协程通知有子协程,子协程又有多个子协程 三.Context包的核心接口和方法 context接口 e ...

  5. Power BI八年回望记

    本人从事BI,数据仓库领域相关工作15个年头,这15年目睹了这个方向从火爆到逐渐被大数据领域不断吞食.中间零散关注Power BI好长时间,也算目睹了它的成长. 那天在网络上搜索power bi,无意 ...

  6. Java集合源码分析(六)——ConcurrentHashMap

    目录 简介 源码分析 父类 接口 字段 内部类 1.链表节点结构 2.树根结构 3.树节点结构 方法 1.构造方法 2.基本并发方法 3.初始化表数组的操作 4.修改添加元素 5.统计元素数量 6.扩 ...

  7. S3C2440从NAND Flash启动和NOR FLASH启动的问题

    1.为什么NAND FLASH不能直接运行程序     NAND FLASH本身是连接到了控制器上而不是系统总线上.CPU运行机制为:CPU启动后是要取指令执行的,如果是SROM.NOR FLASH ...

  8. 20201203-6 设置excel样式【】

    1-1 1 import os 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alig ...

  9. SpringBoot2.x集成Quartz实现定时任务管理(持久化到数据库)

    1. Quartz简介   Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目.   Quartz是一个完全由Java编写的开源作业调度框架,为在Java应 ...

  10. ubuntu 18 安装xgboost GPU版本

    综合上述两个帖子: https://www.cnblogs.com/huadongw/p/6161145.html https://blog.csdn.net/u011587516/article/d ...