栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

windows 下编译 tomcat native

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


一、环境准备

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

Windows Server 2003 R2 Platform SDKWindows 7 SDKWindows DDK 7.1.0cmscJDK8perlC的编译工具(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_1kapr源码压缩包(apr-1.7.0-win32-src.zip)
https://github.com/apache/apr/tree/1.7.0tomcat-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库

分别打开 Visual Studio 2008 和 Visual Studio 2008 x64 编译器命令窗口

注意:下面的命令,带 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 appsopenssl.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 appsopenssl.exe out32-x64
4. 构建Tomcat Native库(dll文件)

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

set OPENSSL_VER=1.1.1k
set APR_VER=1.7.0
mkdir deps-x86apr-%APR_VER%include
mkdir deps-x86apr-%APR_VER%lib
mkdir deps-x86openssl-%OPENSSL_VER%include
mkdir deps-x86openssl-%OPENSSL_VER%lib
xcopy /E deps-x86apr-%APR_VER% deps-x64apr-%APR_VER%
xcopy /E deps-x86openssl-%OPENSSL_VER% deps-x64openssl-%OPENSSL_VER%
 
xcopy /E aprinclude deps-x86apr-%APR_VER%include
xcopy /E aprinclude deps-x64apr-%APR_VER%include
 
copy aprWIN7_X86_LIB_RELEASEapr-1.lib deps-x86apr-%APR_VER%lib
copy aprWIN7_X64_LIB_RELEASEapr-1.lib deps-x64apr-%APR_VER%lib
xcopy /E opensslincludeopenssl deps-x86openssl-%OPENSSL_VER%includeopenssl
xcopy /E opensslincludeopenssl deps-x64openssl-%OPENSSL_VER%includeopenssl
copy opensslout32-x86*.lib deps-x86openssl-%OPENSSL_VER%lib
copy opensslout32-x64*.lib deps-x64openssl-%OPENSSL_VER%lib

copy opensslout32-x86openssl.exe deps-x86openssl-%OPENSSL_VER%
copy opensslout32-x64openssl.exe deps-x64openssl-%OPENSSL_VER%

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

5. 编译

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

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

set JAVA_HOME=C:liqiyesoftwarejdk8  

nmake -f NMAKEMakefile WITH_APR=C:deps-x86apr-%APR_VER% WITH_OPENSSL=C:deps-x86openssl-%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-x86apr-%APR_VER% WITH_OPENSSL=C:deps-x86openssl-%OPENSSL_VER% APR_DECLARE_STATIC=1 OPENSSL_NEW_LIBS=1 BUILD_CPU=x86
 
nmake -f NMAKEMakefile WITH_APR=C:deps-x64apr-%APR_VER% WITH_OPENSSL=C:deps-x64openssl-%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-x64apr-%APR_VER% WITH_OPENSSL=C:deps-x64openssl-%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-binLICENSE
copy NOTICE.bin.win tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binNOTICE
copy ..README.txt tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin
copy srclibVERSIONS tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin
mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbin
mkdir tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbinx64
copy C:deps-x86openssl-%OPENSSL_VER%openssl.exe tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbin
xcopy /E tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-bin tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-bin
copy WIN7_X86_DLL_RELEASEtcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbin
copy WIN7_X86_OCSP_DLL_RELEASEtcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-binbin
copy WIN7_X86_DLL_RELEASEtcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbin
copy WIN7_X86_OCSP_DLL_RELEASEtcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-binbin
copy WIN7_X64_DLL_RELEASEtcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbinx64
copy WIN7_X64_OCSP_DLL_RELEASEtcnative-1.dll tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-binbinx64
copy WIN7_X64_DLL_RELEASEtcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-win32-binbinx64
copy WIN7_X64_OCSP_DLL_RELEASEtcnative-1-src.pdb tomcat-native-%VER%-openssl-%OPENSSL_VER%-ocsp-win32-binbinx64

然后在 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目录VCinclude
复制%JAVA_HOME%includewin32下的jni_md.h 到Visual Studio目录VCinclude

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


总结

欢迎指出我的错误!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号