제 3 자 모듈 중 일부를 통해 icu
라이브러리에 의존하는 프로그램을 만들려고합니다. 나는 의존성이 Network.HTTP.Conduit
을 거쳐 어쩌면 다른 것을 통해 이루어질 것이라고 생각합니다. libicu *는 서로 호환되지 않는 버전이기 때문에 동적으로 링크 된 바이너리는 동일한 배포판의 인접 버전간에도 이식 할 수 없습니다. 내가 관련된 모든 정적 버전이 있다고 생각C++ 래퍼 라이브러리를 사용하는 haskell 프로그램을 정적으로 연결하십시오.
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libicuuc.a(dictionarydata.ao):(.data.rel.ro._ZTIN6icu_5222BytesDictionaryMatcherE[_ZTIN6icu_5222BytesDictionaryMatcherE]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libicuuc.a(dictionarydata.ao):(.data.rel.ro._ZTVN6icu_5217DictionaryMatcherE[_ZTVN6icu_5217DictionaryMatcherE]+0x28): undefined reference to `__cxa_pure_virtual'
collect2: error: ld returned 1 exit status
:
그래서 나는 정적 프로그램 구축을 위해 노력하고있다 :$ ghc --make -static -optc-static -optl-static my-prog.hs -optl-pthread
을 나는 이런 종류의 오류를 많이 얻고있다 라이브러리 (libicu
, libstdc++
). 링커가 libstdc++
(또는 libitl
입니까? 분명히 문제가되는 함수는 후자에서 정의 된 것처럼 보입니다)와 함께 제공되지 않은 것처럼 보입니다.
-optl-static-libstdc++
, -optl-lstdc++
및 -optl-litm
옵션을 명령 줄 끝에 추가하지 않으려 고 시도했습니다.
C++ 지원 기능에 간접적으로 의존하는 haskell 프로그램을 정적으로 링크하는 절차는 무엇입니까? 내가 편집
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
The Glorious Glasgow Haskell Compilation System, version 7.6.3
gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
또는
를 실행하고 있습니다 : : 여기 I 패키지Data.Text.ICU
에 문제를 축소하고하는 것은 정적 실행 파일에 내장 할 수없는 짧은 프로그램입니다
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Text.ICU
main = print $ toUpper Current "Hello!"
트릭을 수행합니다! (아직 정의되지 않은 참조가 있기 때문에 여전히'icu '에 도움이되지 않지만 그 동안'icu' 의존성을 없앴습니다.) – crosser