基于 APR 的 Apache Tomcat 本机库的不兼容版本 [1.1.34]

Posted

技术标签:

【中文标题】基于 APR 的 Apache Tomcat 本机库的不兼容版本 [1.1.34]【英文标题】:incompatible version [1.1.34] of the APR based Apache Tomcat Native library 【发布时间】:2018-07-14 16:02:29 【问题描述】:

在嵌入式 Tomcat 服务器上 Spring Boot 2.0.0.M6 应用程序启动期间,在我的 openSUSE Leap 42.3 服务器上,我在日志中看到以下错误:

ERROR 30471 --- [main] o.a.catalina.core.AprLifecycleListener: An incompatible version [1.1.34] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

您能否解释一下应该在哪里(以及在哪里)修复什么以避免此错误?

【问题讨论】:

【参考方案1】:

您可能(不正确地)升级了 Tomcat,因此您拥有旧版本的原生库。您需要使用随您的 Tomcat 版本提供的版本。

Tomcat 在发行版的bin/ 目录中附带本机库。确保你没有一些旧版本坐在某个地方。您可能需要从头开始重新构建 libtcnative 并将其与您的嵌入式应用程序重新捆绑。

或者,考虑使用非本地解决方案并切换到 Tomcat 的 NIO 连接器。

【讨论】:

【参考方案2】:

这是因为系统安装的 tomcat(CATALINA_HOME) 与 spring boot tomcat 的库冲突。所以要摆脱这个错误,请下载所需版本的本机库并替换为 bin 文件夹的 tcnative-1.dll

下载链接:https://archive.apache.org/dist/tomcat/tomcat-connectors/native/

【讨论】:

好吧,对于 linux,我们必须正确替换 'libtcnative-1' 文件?,我是否需要使用命令生成我的 tomcat 特定的 'libtcnative-1' 或者复制和粘贴它可以吗来自类似来源 - archive.apache.org/dist/tomcat/tomcat-connectors/native/1.1.32/… 复制粘贴应该没问题【参考方案3】:

由于答案对我来说不完整,而且它是谷歌为研究找到的第一个线程,所以我会说什么解决了我的问题。

我必须从https://tomcat.apache.org/download-native.cgi 下载 Apache Tomcat Native Library,然后将 bin 文件夹的内容(带有 tcnative-1.dll)放入我使用的 jdk bin 文件夹中。

希望对某人有所帮助!

来源:APR version mismatch error upon startup

【讨论】:

【参考方案4】:

同样的事情也发生在我身上。在我的情况下,我的机器上有 Tomcat 8.0.37,因此它通过 CATALINA_HOME 使用(由 Spring Boot 中的嵌入式 Tomcat)使用。我检查了使用的 Spring Boot(在我的情况下为 2.0.5.RELEASE)的 Tomcat 版本(它是 8.5.34),并且只是用最新的版本替换了旧版本,当然也更改了CATALINA_HOME。然后警告消失了。

我认为我的方法比下载一些本地 Tomcat 库并将它们放在 JDK 附近更好。

【讨论】:

我能看到的唯一问题是,是否有一些生产代码出于某种原因在旧版本上运行良好,但在新版本上运行良好。例如。您需要进行回归测试才能完全安全。虽然在实践中,我无法猜测这可能会产生任何实际冲突,但在它引发错误之前你永远不会知道。否则,是的,这比使用粘贴的 .dll 进行填充要好。 @JECarterII 是有道理的,当然它可能会中断。但它也可能在复制本机库的情况下中断。从以下角度来看,这是一个相当棘手的变化:我们对变化没有完全的控制和愿景

以上是关于基于 APR 的 Apache Tomcat 本机库的不兼容版本 [1.1.34]的主要内容,如果未能解决你的问题,请参考以下文章

在 java.library.path 上找不到基于 APR 的 Apache Tomcat 本机库

Mina文档 06-传输

解决:The APR based Apache Tomcat Native library which allows optimal performance in production...(示例代码

如何让Tomcat使用APR连接器

Tomcat8安装APR

Apache Tomcat 日志报错APR解决办法