资讯详情

windows 下编译 tomcat native

文章目录

  • 一、环境准备
  • 二、下载源码包
  • 三、操作过程
    • 1. 解压
    • 2. 构建apr库
    • 3. 构建openssl库
    • 4. 构建Tomcat Native库(dll文件)
    • 5. 编译
    • 6. 抽取关键文件
    • 7. 压缩打包
  • 四、遇到的问题
  • 总结


本文主要参考 tomcat 官方文档 https://cwiki.apache.org/confluence/display/TOMCAT/Building the Tomcat Native Connector binaries for Windows


一、环境准备

这篇文章是在 环境下编译 tomcat-native ,请先安装如下:

  • Windows Server 2003 R2 Platform SDK
  • Windows 7 SDK
  • Windows DDK 7.1.0
  • cmsc
  • JDK8
  • perl
  • C的编译工具(MinGW)
  • Visual Studio 2008

注意:Visual Studio 2008 安装时记得钩上C 里面的x64位编译器,默认不勾

我也是按照 tomcat 官方版本成功编译,其他版本的环境不确定

二、下载源码包

  • openssl源码压缩包(openssl-OpenSSL_1_1_1k.zip) https://github.com/openssl/openssl/tree/OpenSSL_1_1_1k
  • apr源码压缩包(apr-1.7.0-win32-src.zip) https://github.com/apache/apr/tree/1.7.0
  • tomcat-native源码(tomcat-native-1.2.31-win32-src.zip) https://dlcdn.apache.org/tomcat/tomcat-connectors/native/1.2.31/source/

在 windows 环境下编译 tomcat-native,其实是将 apr、openssl 编译使用的源代码包,最终形成可调用的库文件 tcnative-1.dll

注:您必须高度重视这些源码包的版本号,并在编译后指定这些版本号

三、操作过程

1. 解压

解压上下载的三个源码

  • 将 apr-1.7.0-win32-src.zip 解压目录下的一切都切 tomcat-native 的 native/srclib/apr 下
  • 将 openssl-OpenSSL_1_1_1k.zip 解压目录下的一切都切 tomcat-native 的 native/srclib/openssl 下

注意:复制 apr、openssl 不要带上最外层的目录,直接复制里面。如果目录不正确,以后的操作就会出错。

2. 构建apr库

分别打开 编译器命令窗口

注意:下面的命令,带 x64 的就用 Visual Studio 2008 x64 执行命令窗口,否者报错

cd 进去 native/srclib/apr

nmake -f NMAKEmakefile BUILD_CPU=x86 APR_DECLARE_STATIC=1 nmake -f NMAKEmakefile BUILD_CPU=x64 APR_DECLARE_STATIC=1 

3. 构建openssl库

cd 进去 native/srclib/openssl

构建32位库文件

perl Configure no-shared VC-WIN32 nmake mkdir out32-x86 copy libssl.lib out32-x86\ copy libcrypto.lib out32-x86\ copy apps\openssl.exe out32-x86\ nmake clean 

构建64位库文件

perl Configure no-shared VC-WIN64A nmake mkdir out32-x64 copy libssl.lib out32-x64\ copy libcrypto.lib out32-x64\ copy apps\openssl.exe out32-x64\ 

4. 构建Tomcat Native库(dll文件)

cd 进去 native/srclib 注:下面的版本对应你下载包的版本

set OPENSSL_VER=1.1.1k set APR_VER=1.7.0 mkdir \deps-x86\apr-%APR_VER%\include mkdir \deps-x86\apr-%APR_VER%\lib mkdir \deps-x86\openssl-%OPENSSL_VER%\include mkdir \deps-x86\openssl-%OPENSSL_VER%\lib xcopy /E \deps-x86\apr-%APR_VER% \deps-x64\apr-%APR_VER%\ xcopy /E \deps-x86\openssl-%OPENSSL_VER% \deps-x64\openssl-%OPENSSL_VER%\ xcopy /E apr\include \deps-x86\apr-%APR_VER%\include\ xcopy /E apr\include \deps-x64\apr-%APR_VER%\include\ copy apr\WIN7_X86_LIB_RELEASE\apr-1.lib \deps-x86\apr-%APR_VER%\lib copy apr\WIN7_X64_LIB_RELEASE\apr-1.lib \deps-x64\apr-%APR_VER%\lib xcopy /E openssl\include\openssl \deps-x86\openssl-%OPENSSL_VER%\include\openssl\ xcopy /E openssl\include\openssl \deps-x64\openssl-%OPENSSL_VER%\include\openssl\ copy openssl\out32-x86\*.lib \deps-x86\openssl-%OPENSSL_VER%\lib\ copy openssl\out32-x64\*.lib \deps-x64\openssl-%OPENSSL_VER%\lib\ copy openssl\out32-x86\openssl.exe \deps-x86\openssl-%OPENSSL_VER%\ copy openssl\out32-x64\openssl.exe \deps-x64\openssl-%OPENSSL_VER%\ 

这时候你发现在该磁盘根目录下生成了 deps-x64、deps-x86 文件夹,里面有文件的

5. 编译

cd … 也就是到 tomcat-native的native目录

注意:下面修成你自己 jdk 的目录

set JAVA_HOME=C:\liqiye\software\jdk8  

nmake -f NMAKEMakefile WITH_APR=C:\deps-x86\apr-%APR_VER% WITH_OPENSSL=C:\deps-x86\openssl-%OPENSSL_VER% APR_DECLARE_STATIC=1 OPENSSL_NEW_LIBS=1 ENABLE_OCSP=1 BUILD_CPU=x86
move WIN7_X86_DLL_RELEASE WIN7_X86_OCSP_DLL_RELEASE
nmake -f NMAKEMakefile WITH_APR=C:\deps-x86\apr-%APR_VER% WITH_OPENSSL=C:\deps-x86\openssl-%OPENSSL_VER% APR_DECLARE_STATIC=1 OPENSSL_NEW_LIBS=1 BUILD_CPU=x86
 
nmake -f NMAKEMakefile WITH_APR=C:\deps-x64\apr-%APR_VER% WITH_OPENSSL=C:\deps-x64\openssl-%OPENSSL_VER% APR_DECLARE_STATIC=1 OPENSSL_NEW_LIBS=1 ENABLE_OCSP=1 BUILD_CPU=x64
move WIN7_X64_DLL_RELEASE WIN7_X64_OCSP_DLL_RELEASE
nmake -f NMAKEMakefile WITH_APR=C:\deps-x64\apr-%APR_VER% WITH_OPENSSL=C:\deps-x64\openssl-%OPENSSL_VER% APR_DECLARE_STATIC=1 OPENSSL_NEW_LIBS=1 BUILD_CPU=x64

其实这时候我们要的目标文件 tcnative-1.dll 已经生成了

6. 抽取关键文件

还是在 tomcat-native的 native 目录下

set VER=1.2.31

mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin
copy LICENSE.bin.win tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\LICENSE
copy NOTICE.bin.win tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\NOTICE
copy ..\README.txt tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\
copy srclib\VERSIONS tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\
mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin\x64
copy C:\deps-x86\openssl-%OPENSSL_VER%\openssl.exe tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
xcopy /E tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin\
copy WIN7_X86_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
copy WIN7_X86_OCSP_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin\bin
copy WIN7_X86_DLL_RELEASE\tcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin
copy WIN7_X86_OCSP_DLL_RELEASE\tcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin\bin
copy WIN7_X64_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin\x64
copy WIN7_X64_OCSP_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin\bin\x64
copy WIN7_X64_DLL_RELEASE\tcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin\bin\x64
copy WIN7_X64_OCSP_DLL_RELEASE\tcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin\bin\x64

然后在 tomcat-native 的 native 目录下出现以下两个目录 tomcat-native-1.2.31-openssl-1.1.1k-win32-bin tomcat-native-1.2.31-openssl-1.1.1k-ocsp-win32-bin

7. 压缩打包

还是在 tomcat-native的 native 目录下

set PATH=%PATH%;%JAVA_HOME%\bin
cd tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin
jar -cMf ..\tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin.zip *
cd ..\tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin
jar -cMf ..\tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin.zip *

然后在 tomcat-native 的 native 目录下有了两个压缩包,他们跟官网下载的编译后的包是一样的

到这里已经完成在 windows 下将 tomcat-native 源码编译成 dll 文件了

四、遇到的问题

如果上面编译过程中,报错 fatal error C1083: 无 法打开包括文件:“jni.h”: No such file or directory

复制%JAVA_HOME%\include\下的 jni.h 到Visual Studio目录\VC\include 复制%JAVA_HOME%\include\win32\下的jni_md.h 到Visual Studio目录\VC\include\

换句话说,就是你安装的 Visual Studio ,他的 VC/include/ 目录下没有这两个文件,你去 jdk 下复制这两个文件过去就可以了


总结

欢迎指出我的错误!

标签: 二极管cmsc

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台