我想从我自己构建的监禁环境中运行一个简单的 Haskell 程序。我想运行以下 Haskell 程序:
import System.IO
main = do
hPutStrLn stderr "test standard error!"
hPutStrLn stdout "test standard out!"
它只是向标准错误和标准输出输出一个字符串,在监狱外工作得很好。代码编译如下:
ghc -O2 --make -static -optc-static -optl-static $MAINHS -optl-pthread -o bin/run_ai
正如我所说,我得到了一个运行程序的 run_ai 可执行文件,这在监狱之外可以正常工作。下面是放在监狱环境中的东西,我认为这里缺少一些东西,因为当我在监狱中运行程序时,它绝对什么都不做,它甚至不退出,也没有给出任何错误/输出转储。
mkdir -p lib64 lib bin
cp /bin/sh bin/
# Binaries
cp /lib64/ld-linux-x86-64.so.2 lib64/
cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/
cp /lib/x86_64-linux-gnu/libc.so.6 lib/
cp /lib/x86_64-linux-gnu/libdl.so.2 lib/
cp /lib/x86_64-linux-gnu/librt.so.1 lib/
cp /lib/x86_64-linux-gnu/libm.so.6 lib/
cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/
cp /lib/x86_64-linux-gnu/libutil.so.1 lib/
cp /usr/lib/x86_64-linux-gnu/libffi.so.6 lib/
cp /usr/lib/x86_64-linux-gnu/libgmp.so.10 lib/
cp /usr/lib/libgmp.so.3 lib/
我知道监狱本身很好用,因为我已经成功地将它用于十几种其他编程语言,但是 Haskell 让我很头疼,因为我对可能出现的问题一无所知。遗憾的是,我不是 Haskell 方面的专家,但我只需要它来编译并在监狱中运行。我是否遗漏了运行可执行 Haskell 文件实际需要的东西?
所以我的问题是:我错过了什么/做错了什么?