在使用Netty SSL時,咱們每每會採用netty-tcnative-boringssl組件。可是netty-tcnative-boringssl在Windows上僅有64位版本的,沒有32版本的。因爲項目須要用於32位的,因此本身編譯了一下。html
下面詳細記錄編譯的步驟。git
https://codeload.github.com/netty/netty-tcnative/zip/netty-tcnative-parent-2.0.34.Final
將環境變量 JAVA_HOME 指向 Java 8 32 位目錄。github
位置:./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
位置:./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項目跟編譯環境相匹配。
位置:./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); }
不作這個修改的話,會報連接錯誤。
git clone https://boringssl.googlesource.com/boringssl
因爲代碼來自googlesource,因此須要科*上網。將boringssl的源碼放到./boringssl-static/target目錄下。
# 進入到32位編譯環境 call "D:\Program1\vs\2017-community\VC\Auxiliary\Build\vcvars32.bat" # 打包 mvn package –X
編譯過程當中因爲環境的不一樣,可能會出現各類問題。遇到問題時,耐心一些,參考錯誤日誌,一個一個地解決就能夠了。
爲方便你們使用,本文附帶了一個編譯好的文件。以下: