我刚刚编译stack build
的可执行文件,然后只复制过的可执行文件到不同的机器,但运行的应用程序的结果:
./app: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
我猜我需要从相应的Linux发行版的软件包安装一些软件包 - 但有没有更有效的方法,然后google搜索,来了,并试图找出包中的每个错误?
我已经尝试了一些搬运工图像内运行可执行程序: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 /应用程式:错误而载入共享库:libgmp.so.10:无法打开共享对象文件:没有这样的文件或目录
apt-get install libgmp-dev
和它的作品...
其实,这是不特定于哈斯克尔,而是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发行版的包管理系统,找出包可能包含所需so
文件。对于Ubuntu的,你会用apt-file
,为ArchLinux的 - pkgfile
,等等。
我必须警告你,ldd
实际执行一些在文件中找到的代码,因此恶意程序可以接管并肆虐。如果你想仔细来历不明的可执行这种方式,你必须在一次性法医遏制这样做。据我所知,这并不适用于手头的案件,但尽管如此我必须警告你。