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 参考资料

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. mysql-installer-web-community和mysql-installer-communityl两个版本的区别

    mysql的官网上提供了两个mysql共享版本的安装,一个20M,一个373.4M.二者的区别是前者是联网安装,当安装时必须能访问互联网,后者是离线安装使用的,一般建议下载离线安装使用的版本. 学Py ...

  2. Python中sorted(iterable, /, *, key=None, reverse=False)的参数中的斜杆是什么意思?

    通过help(sorted)查看sorted的帮助文档,显示如下: Help on built-in function sorted in module builtins: sorted(iterab ...

  3. Azure Cosmos DB (五) .Net Core 控制台应用

    一,引言 之前在讲Azure CosmosDB Core(SQL)核心的时候,使用了EF Core 的方式,引用了 "Microsoft.EntityFrameworkCore.Cosmos ...

  4. Docker-使用数据卷在宿主机和容器间的数据共享

    场景一:现在用Docker创建了N个容器,但是这些容器之间需要数据共享,这个时候我们应该怎么办?[参考第四步] 场景二:docker创建了一个容器并进入容器,添加了一些定制功能,此时除了用docker ...

  5. js内存泄漏的问题?

    内存泄漏指任何对象在您不再拥有或需要它之后仍然存在. 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环 ...

  6. JAVA死锁的检测流程

    步骤一. 查询检测的进程 1.首先查看系统资源占用信息,TOP看一下 发现正在运行的JAVA项目CPU占用率很高,百分之360左右了,那么问题一定出在这个程序中 2 .也可以通过名称查询进程pid 步 ...

  7. uni-app中使用sass

    uni-app在创建时,工程目录下会有个uni.scss文件,我们可以直接在里面定制化scss变量. 全局scss中的坑: 1.如果要引用全局外部scss文件,可以考虑在uni.scss这个系统全局s ...

  8. Java安全之原生readObject方法解读

    Java安全之原生readObject方法解读 0x00 前言 在上篇文章分析shiro中,遇到了Shiro重写了ObjectInputStream的resolveClass导致的一些基于Invoke ...

  9. 漫谈 HTTP 性能优化

    本文主要是侧重于 HTTP 的优化,对于 HTTPS 后续文章会讲. 既然要做性能优化,那么,我们就需要知道:什么是性能?它都有哪些指标,又应该如何度量,进而采取哪些手段去优化? "性能&q ...

  10. Kafka消费者手动提交消息偏移

    生产者每次调用poll()方法时,它总是返回由生产者写入Kafka但还没有消费的消息,如果消费者一致处于运行状态,那么分区消息偏移量就没什么用处,但是如果消费者发生崩溃或者有新的消费者加入群组,就会触 ...