当前位置: 首页 > 工具软件 > Tomcat Native > 使用案例 >

windows 下编译 tomcat native

沈华晖
2023-12-01


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


一、环境准备

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

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

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

二、源码包下载

在 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库

分别用 Visual Studio 2008Visual Studio 2008 x64 编译器命令窗口执行下面的命令

注意:下面的命令,带 x64 的就用 Visual Studio 2008 x64 的命令窗口执行,带x86的就用 Visual Studio 2008 执行
先执行完 x86 的再去执行 x64 的,如果中途关闭了 Visual Studio 2008 的窗口,要再次输入下面的 SET 参数的命令

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. 编译

返回上天一层, 也就是到 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 下复制这两个文件过去就可以了


总结

欢迎指出我的错误!

 类似资料: