zoukankan      html  css  js  c++  java
  • 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文件文件会找不到。  针对这个问题,我提交了一个pull request,并且被采纳了,如下:

    https://github.com/netty/netty-tcnative/commit/3baf6ccefd51830f5ab41706a6d57d4d07cfa158

    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:Program1vs2017-communityVCAuxiliaryBuildvcvars32.bat"
    
    # 打包
    
    mvn package –X

    4 小结

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

    5 参考资料

    6 附件

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

  • 相关阅读:
    让Android模拟器速度飞起来_Eclipse+BlueStacks调试Android应用【2012-10-30】
    开源镜像站-Android镜像
    字符编码的几篇文章
    [C/C++]_[Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件]
    MSVC下快速Unicode I/O
    edltplus使用正则表达式替换多余空行
    修改CMD的编码
    windows 安裝 gcc 編譯器
    CF369 C(递归 + 回溯)
    VIM支持系统剪切板
  • 原文地址:https://www.cnblogs.com/dehai/p/14237105.html
Copyright © 2011-2022 走看看