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

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

  • 相关阅读:
    POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
    POJ 3083 Children of the Candy Corn bfs和dfs
    POJ 2049 Finding Nemo bfs 建图很难。。
    POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
    POJ 1013 Counterfeit Dollar 集合上的位运算
    POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
    无聊拿socket写的100以内的加法考试。。。
    POJ 1753 Flip Game
    初学socket,c语言写的简单局域网聊天
    汇编语言 复习 第十一章 标志寄存器
  • 原文地址:https://www.cnblogs.com/dehai/p/14237105.html
Copyright © 2011-2022 走看看