2014-09-30 4 views
4

Я хочу запустить простую программу 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?

Так что мой вопрос: что мне не хватает/не так?

+0

Выполняет ли запуск 'ldd' в двоичном ghc, дает вам какие-либо намеки на то, что вам не хватает .so? – Squidly

+6

Запустите программу за пределами тюрьмы под 'strace', посмотрите, какие файлы она открывает. –

+1

Возможно, вы не правы, но обратите внимание, что с помощью [PureIO] (https://hackage.haskell.org/package/pure-io-0.2.0/docs/PureIO.html) вы можете «заключить в тюрьму» Haskell' main 'все изнутри языка. – leftaroundabout

ответ

3

За пределами тюрьмы, бежать

Трассирование -e открыт yourprogram

Это напечатает имена всех файлов открывается программа.

 Смежные вопросы

  • Нет связанных вопросов^_^