Я хочу запустить простую программу Haskell из изолированной среды, которую я сам создаю. Следующая программа 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?
Так что мой вопрос: что мне не хватает/не так?
Выполняет ли запуск 'ldd' в двоичном ghc, дает вам какие-либо намеки на то, что вам не хватает .so? – Squidly
Запустите программу за пределами тюрьмы под 'strace', посмотрите, какие файлы она открывает. –
Возможно, вы не правы, но обратите внимание, что с помощью [PureIO] (https://hackage.haskell.org/package/pure-io-0.2.0/docs/PureIO.html) вы можете «заключить в тюрьму» Haskell' main 'все изнутри языка. – leftaroundabout