Netty tcnative boringssl windows 32-bit 编译

1 问题

  在使用Netty SSL时,咱们每每会采用netty-tcnative-boringssl组件。可是netty-tcnative-boringssl在Windows上仅有64位版本的,没有32版本的。因为项目须要用于32位的,因此本身编译了一下。html

  下面详细记录编译的步骤。git

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 位目录。github

 

3.3 修改pom.xml

位置:./pom.xmlapache

 

注释掉不要的模块,编译速度会快不少,以下:windows

<modules>

    <module>boringssl-static</module>

    <!-- <module>openssl-dynamic</module>

    <module>openssl-static</module>

    <module>libressl-static</module> -->

</modules>


<archBits>64</archBits>

修改成:tomcat

<archBits>32</archBits>

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

 

 

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

修改成:google

<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文件文件会找不到。spa

 

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 附件

  为方便你们使用,本文附带了一个编译好的文件。以下:

相关文章
相关标签/搜索