2011-09-08 3 views
4

현재 Windows 사용자 외에 일부 Linux 바이너리를 내 프로그램의 사용자에게 제공하려고합니다. 따라서 haskell-platform 11.04 패키지는 여전히 2010 버전입니다.) 그러나 우분투 10.04에서 결과 바이너리를 실행하려고하면 libgmp.so.10을 찾을 수 없다는 메시지가 나타납니다./usr/lib를 확인하면 10.04에는 libgmp.so.3이 있고 11.10에는 libgmp.so.10이 있음을 알 수 있습니다. 따라서 GHC는 정적이 아닌 동적으로 libgmp에 연결되어있는 것처럼 보입니다. 이는 기본값이라고 생각했습니다.Ubuntu 11.10에서 빌드 된 Haskell 프로그램이 Ubuntu 10.04에서 실행되지 않습니다.

바이너리에 정적으로 libgmp를 포함하도록 GHC에 알릴 방법이 있습니까? 그렇지 않다면 다른 버전의 libgmp를 설치하지 않아도되는 다른 해결책이 있습니까?

+0

제가 틀린 것이 아니라면'libgmp'가 기본적으로 동적으로 링크되는 이유는 정적으로 링크하면 결과 실행 파일을 GPL 라이센스하에 배포해야한다는 것입니다. – hammar

+0

패키지를 작성하고 각 패키지를 빌드하고 각기 다른 아치에 정적으로 연결하지 않고 – alternative

답변

2

정적으로 바이너리를 연결하려면 -static 플래그로 충분하지 않습니다. 대신, 사용이 사용

ghc -static -optl-static -optl-pthread --make yourfile.hs 

, 내 바이너리는 우분투의 두 버전에서 제대로 실행.

+0

Heroku Cedar 스택에 웹 응용 프로그램을 배포하려고합니다. Cedar는 Ubuntu 11.04를 사용하고 11.10을 사용합니다. 기본적으로 동일한 오류가 발생합니다. 하지만 귀하의 솔루션을 시도하고 새로운 오류 mkTextEncoding : 잘못된 인수 (잘못된 인수)'발생시킵니다. 여기서 나를 도울 수 있니? –

1

종종 오래된 libgmp 패키지도 사용할 수 있습니다. 즉, 프로그램이 일반 libgmp 또는 libgmp10 대신 libgmp3c2 패키지에 종속되도록하십시오. 이것은 이전 버전의 GHC 또는 gmp lib (예 : libgmp10-dev 대신 libgmp3-dev 설치)를 사용하여 컴파일하여 수행 할 수 있습니다.

+0

정적으로 링크하지는 않지만 libgmp3에 동적으로 링크하지 않으므로 Ubuntu 11.10 및 기타 Linux 배포판에서 실행되지 않습니다 ? generic libgmp에 대해서도 언급합니다. 거기에 libgmp의 버전을 만나면 바이너리를 사용할 수 있습니까? – FalconNL

+0

일반 libgmp에서 나는 현재 libgmp의 최신 버전을 자동으로 제공하는 일반 패키지를 의미했습니다. 새로운 주 버전 번호는 libgmp3에서 libgmp10으로 전환 할 때 기능이 삭제되었음을 의미하므로 일반적으로 프로그램을 연결할 수 없습니다. Ubuntu 11.10은 여전히 ​​libgmp3을 사용할 수 있기 때문에 프로그램이 Ubuntu 11.10에서도 실행됩니다 (여러 주요 버전을 병렬로 설치할 수 있음). 요약 : -static이 당신에게 충분한 옵션이라면, 괜찮습니다. 그리고 -dynamic을 사용한다면 가장 합리적인 라이브러리를 사용하십시오. – thiton

+0

.deb가 제어 파일에있는 동적 라이브러리의 필수 버전에 대한 종속성을 표시하는지 확인하십시오. – tripleee

1

라이브러리에 대해 정적으로 링크하려면 ghc 옵션 -static이 있어야합니다.

+0

아, 그래서 리눅스에서 이것을 명시 적으로 활성화시켜야합니까? 저는 항상 GHC가 기본적으로 항상 정적으로 컴파일 된 것으로 생각했습니다. 내가 집에 갈 때 이것을 시험해 볼 것입니다. – FalconNL

+0

좋아, 난 정적으로 컴파일을 시도하고 불행히도 나는 여전히 같은 오류 메시지가 나타납니다. 내가 뭘 잘못하고 있는거야? – FalconNL