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>
    <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>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 小结

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

  • 相关阅读:
    Django form组件
    python Ajax
    python 中间件
    python Cookie Session 相关用法
    python 模型 ORM简介
    python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统
    python Tags 母板 组件 静态文件相关 自定义simpletag inclusion_tag
    python MVC、MTV 框架介绍 Django 模板系统常用语法
    python 外键用法 多对多关系 ORM操作 模板相关
    python 异常处理模块 -堆栈信息(traceback)
  • 原文地址:https://www.cnblogs.com/wjxzs/p/14239047.html
Copyright © 2011-2022 走看看