加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何确定Haskell可执行文件所需的OS依赖包?

发布时间:2020-12-14 04:55:31 所属栏目:百科 来源:网络整理
导读:我刚刚编译了一个带有堆栈构建的可执行文件,然后只是将可执行文件复制到另一台机器上,但运行应用程序会导致: ./app: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory 我猜我需要从相
我刚刚编译了一个带有堆栈构建的可执行文件,然后只是将可执行文件复制到另一台机器上,但运行应用程序会导致:

./app: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

我猜我需要从相应的Linux发行版的软件包中安装一些软件包 – 但是有更有效的方式然后搜索出现的每个错误并尝试识别软件包吗?

我试过在一些docker镜像中运行可执行文件:
fpco / haskell-scratch,debian:stretch-slim所有导致相同的行为:

sudo docker run --rm -it -v $(pwd):/abcxyz fpco/haskell-scratch sh
# /abcxyz/app
/abcxyz/app: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

更新

使用debian映像我安装了openssl:

apt-get install openssl

新错误:

/ abcxyz / app:加载共享库时出错:libgmp.so.10:无法打开共享对象文件:没有这样的文件或目录

apt-get install libgmp-dev

它有效……

解决方法

这实际上并不是Haskell特有的,而是Linux动态链接共享库的方式.您可以使用ldd< file>:

% ldd ./StateSort
    linux-vdso.so.1 (0x00007ffd29385000)
    libm.so.6 => /usr/lib/libm.so.6 (0x00007fd986bd1000)
    libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007fd98693e000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007fd986736000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fd986532000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fd986314000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007fd985f5c000)
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fd986f1d000)

如果缺少库,您将立即注意到它们:右侧和so文件的路径将不存在.

然后,您将需要参考Linux发行版的软件包管理系统,以找出可能包含所需文件的软件包.对于Ubuntu,您可以使用apt-file,用于ArchLinux – pkgfile,依此类推.

我必须警告你,ldd实际上执行了文件中的一些代码,因此恶意程序可能会接管并造成严重破坏.如果您想以这种方式剖析未知来源的可执行文件,则必须在一次性取证收容中进行.据我了解,这不适用于手头的情况,但我必须警告你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读