libnetty_tcnative_linux_x86_64.so: libapr-1.so.0: 无法打开共享对象文件: 没有那个文件或目录

在一个netty的项目里,使用libnetty_tcnative以及apr来使用openssl。参考https://netty.io/wiki/forked-tomcat-native.html

集成:

<project>
<properties>
<!-- Configure the os-maven-plugin extension to expand the classifier on -->
<!-- Fedora-"like" systems. -->
<os.detection.classifierWithLikes>fedora</os.detection.classifierWithLikes>
</properties>
...
<dependencies>
...
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative</artifactId>
<version>2.0.0.Final</version>
<classifier>${os.detected.classifier}</classifier>
</dependency>
...
</dependencies>
...
<build>
...
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.4.0.Final</version>
</extension>
</extensions>
...
</build>
...
</project>

打开日志的trace级别,发现没有连接上openssl,使用的是jdkssl。报错如下:

关键报错信息如下:

libnetty_tcnative_linux_x86_64.so: libapr-1.so.0: 无法打开共享对象文件: 没有那个文件或目录
at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_171]
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) ~[?:1.8.0_171]
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) ~[?:1.8.0_171]
at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[?:1.8.0_171]
at java.lang.System.loadLibrary(System.java:1122) ~[?:1.8.0_171]
at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38) ~[netty-all-4.1.29.Final.jar:4.1.29.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_171]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_171]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_171]
at io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:336) ~[netty-all-4.1.29.Final.jar:4.1.29.Final]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_171]

原因是没有找到libapr-1.so.0,系统为Ubuntu。

解决方法:把libapr-1.so.0连接到apr的安装路径

ln -s /usr/local/apr/lib/libapr-1.so.0  libapr-1.so.0 

版权声明:著作权归作者所有。

相关推荐

Linux排除特定文件打包压缩文件夹

Linux打包可以使用tar命令。如果要排除目录里的特定文件或文件夹,可以使用--exclude选项。$ tar --exclude='./folder' -zcvf /backup/filename.tgz .--exclude选项需要放在源文件和目的压缩包文件之前。排除多个文件/文件夹$ tar --exclude='./folder' --exclude='./upload/folder2'

Linux bash查找目录下最新的文件

方法一:ls使用-t按时间排序,然后使用head获取前面几条记录:ls -t b2* | head -1 方法二:使用unsetunset -v latest for file in "$dir"/*; do   [[ $file 

Linux统计目录下所有文件的行数

这里提供两种方法来统计目录下所有文件的行数:1、结合使用find和wc:find . -name '*.pl' | xargs wc -l 另外,此命令也可以改为:( find ./ -name '*.pl' -print0 | xargs -0&n

Linux使用find查找大文件

Linux可以使用find命令来查找大文件。语法find <path> [-type <file-type>] -size +<size><unit> -type:指定文件类型,它有这些值d:目录f:普通文件l:链接b: 缓存块c: 非缓存字符p:  pipes

Linux shell命令监控文件的变化

1、tail:监控文件的实时更新tail -f logfile.log 2、watch:定时执行命令并输出命令内容,对于有改变的输出会以高亮的方式显示watch -n 10 -d ls -l /var/ -n:设置每隔多少秒执行指定的命令-d:设置执行的命令示例里是每10秒执行ls命令。