반응형
Language.Haskell.Interpreter와 함께 실행 파일을 제공하는 방법은 무엇입니까?
hint
내 프로그램과 함께 사용할 Haskell에 플러그인을 작성할 수 있도록 Haskell 인터프리터 를 사용하고 싶습니다. 내 실행 파일을 위해 전체 Haskell 플랫폼을 제공하고 싶지 않습니다.
일반적으로 Haskell 실행 파일은 독립적입니다. 예를 들어를 지우면 PATH
문제가 발생하지 않습니다.
$ PATH=. Hello
Hello world
그러나 다음을 runInterpreter
지우면 폭탄을 사용하는 간단한 테스트 프로그램입니다 PATH
.
$ PATH=. TryHint
GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n"
환경에서 사용할 수있는 라이브러리 또는 실행 파일은 무엇입니까?
otool
많은 지침을 제공하지 않습니다.
otool -L TryHint
TryHint:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0)
에 대한 테스트 코드 TryHint
는별로 중요하지 않습니다.
import Control.Monad
import Language.Haskell.Interpreter
main = do
f <- runInterpreter $ loadModules ["Test"] >> setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int)
case f of
Left e -> print e
Right r -> mapM_ (print . r) [1..10]
그것은 런타임에 해석 f
되는 함수에 바인딩 됩니다 Test.hs
. Test.hs
다음과 같이 보입니다 :
module Test where
f :: Int -> Int
f x = x + 1
실행 파일을 제공하는 Language.Haskell.Interpreter
것은 당신이 보여준 방식과 완벽하게 어울리는 것 같습니다. PATH
실행하려는 스크립트 로 설정해야 합니다.
참고로 @bennofs에서 언급했듯이 GHC API를 정적으로 연결하는 것은 GHC 7.8에 도입 된 새로운 동적 링커와 작동하지 않습니다 (대화식 코드 실행에는 동적 라이브러리가 필요합니다).
참고 URL : https://stackoverflow.com/questions/28204973/how-to-ship-an- executable-with-language-haskell-interpreter
반응형
'development' 카테고리의 다른 글
Visual Studio 코드에서 패널을 오른쪽으로 이동 (0) | 2020.06.25 |
---|---|
Cocoapods : CocoaPods / Specs 사양 저장소를 업데이트하기 위해 GitHub에 연결하지 못했습니다. (0) | 2020.06.25 |
이 개체 수명 연장 폐쇄는 C # 컴파일러 버그입니까? (0) | 2020.06.25 |
편리한 C ++ 구조체 초기화 (0) | 2020.06.25 |
프로그래밍 방식으로 버튼을 숨기는 방법? (0) | 2020.06.24 |