netty - jar netty-tcnative-openssl-static 似乎动态链接到机器上的 OpenSsl 库,这是正确的吗?
问题描述
我已经从源代码构建了工件 netty-tcnative-openssl-static-2.0.20.Final-linux-x86_64.jar。但是我注意到 libnetty_tcnative.so 是动态链接到 openssl 而不是静态链接:
[root@omega 2018-12-14--00-24-20 sb are you NRUSSEL? #]ldd META-INF/native/libnetty_tcnative.so
ldd: warning: you do not have execution permission for `META-INF/native/libnetty_tcnative.so'
linux-vdso.so.1 => (0x00007ffcd42c2000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007febf86b5000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007febf82cf000)
librt.so.1 => /lib64/librt.so.1 (0x00007febf80c7000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007febf7e90000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007febf7c72000)
libc.so.6 => /lib64/libc.so.6 (0x00007febf78de000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007febf769a000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007febf73b2000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007febf71ae000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007febf6f82000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007febf6d7d000)
libz.so.1 => /lib64/libz.so.1 (0x00007febf6b67000)
/lib64/ld-linux-x86-64.so.2 (0x0000563e43578000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007febf6964000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007febf6758000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007febf6555000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007febf633b000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007febf611b000)
这是正确的还是我的构建过程有问题?
解决方案
是的,不知道你在做什么,但我只是用 netty-tcnative 的当前主分支尝试过它,它就可以工作:
./mvnw -pl openssl-static clean package
完成此操作后,您可以看到一切都符合预期:
[root@d7724df14184 code]# ldd openssl-static/target/native-lib-only/META-INF/native/linux64/libnetty_tcnative.so
ldd: warning: you do not have execution permission for `openssl-static/target/native-lib-only/META-INF/native/linux64/libnetty_tcnative.so'
linux-vdso.so.1 => (0x00007ffcbadb5000)
librt.so.1 => /lib64/librt.so.1 (0x00007faccd3b1000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007faccd17a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007facccf5d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007facccd59000)
libc.so.6 => /lib64/libc.so.6 (0x00007faccc9c5000)
/lib64/ld-linux-x86-64.so.2 (0x00007faccdae9000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007faccc7c2000)
例如,您可以使用 centos 的 docker-compose 文件来确保您拥有正确的 env 环境设置:
netty-tcnative git:(master) docker-compose -f docker/docker-compose.centos.yaml -f docker/docker-compose.centos-6.18.yaml run shell
推荐阅读
- android - 为什么低于 5.0 的 Android 版本不易受到 CVE-2017-13156 的攻击?
- python - 仅使用特定 Csv 列的 KMeans 聚类
- amazon-web-services - 启动 EC2 实例时是否需要同时拥有私有 IP 和私有 DNS。其中一个还不够吗?
- python - 如何在我的脚本所在的目录中使用 python 脚本安装 npm 模块
- c# - 如何从反编译的 WebForms 项目(.aspx 文件)中获取 HTML
- java - 通过 groovy 脚本运行测试步骤时如何解决错误“意外元素:CDATA”?
- javascript - 如何在 cy.visit() 中向 URL 插入动态值?
- reactjs - Gatsby Webhooks 以及如何从 Strapi 触发构建
- html - Firefox 和 MS Edge 在隐藏元素中下载内容(但不应该)
- sql-server - VB/SQL - 如何从具有多个匹配项的联接表中过滤 DataGridView