2016-11-07 4 views
1

OSX에서 정적 라이브러리로 gnu iconv을 빌드하려고합니다. 이것은 문제가되지 않습니다, 그것은libiconv 심볼 이름없이 OSX에서 iconv의 정적 lib를 빌드하는 방법은 무엇입니까?

./configure --enable-static 
make clean && make 

와 잘 구축하지만 libiconv.a에 나노를 실행할 때, 나는 다음과 같은 결과

... 
_libiconv 
_libiconv_open_ 
_libiconv_close_ 
... 

내가 사용 libxml2를 구축하려는 때문에이 문제가 얻을 이 라이브러리는, 그것이 헤더 파일을 보면 다음과 같은 기호

iconv 
iconv_open 
iconv_close 

이 필요, 그것은이 두 기호 이름의 차이처럼 보인다는 LIBICONV_PLUG이 정의되어 있는지 여부입니다. 몇 가지가 같은 ICONV_GET_DISCARD_ILSEQ 및 ICONV_SET_HOOKS으로 정의되지 않기 때문에 그러나 나는 실행할 때이 오류가 발생할 수

make clean && make CPPFLAGS=-DLIBICONV_PLUG 

으로합니다. 헤더 파일을 다시 살펴보면 LIBICONV_PLUG가 정의되지 않은 경우에만 정의됩니다.

제 질문은 LIBICONV_PLUG을 (를) 올바르게 사용하고 있습니까? 필요한 기호로 정적 라이브러리를 얻는 다른 방법이 있습니까? 정의되지 않은 기호를 통해 직접 손으로 정의해야합니까?

답변

2

GNU libiconv을 빌드하고 사용하는 세 가지 방법이 있습니다. 세 가지 경우 모두 헤더 파일을 통해 C 또는 C++ 프로그램에서 사용하도록 정의한 기호는 'iconv_open', 'iconv', 'iconv_close'입니다.

  • 정상적인 일

    오브젝트 파일 수준에서, 그것은 정의이다 기호를 운영 체제의 표준 라이브러리와 충돌하지 않도록 등 'libiconv_open'. C 레벨 및 오브젝트 파일 레벨에서 심볼 사이의 매핑은 <iconv.h>에서 발생합니다.

    시스템의 <iconv.h>을 GNU libiconv. {so, dylib, a} 또는 그 반대로 사용하면 링크 오류가 발생합니다. 이 기능은 기능면에서 약간 다릅니다 (OS X libiconv.dylib는 "UTF-8-MAC"이라는 인코딩을 지원하지만 GNU libiconv는 여러 가지 개선 된 기능과 수정 사항이 있음). 불일치로 인해 문제가 발생할 수 있습니다.

  • 시스템 공급 업체 인 경우 'libiconv_open'대신 'iconv_open'등을 정의하는 방식으로 GNU libiconv를 빌드 할 수 있습니다. 이는 iconv.h의 간단한 편집을 통해 이루어집니다.

    특히 OS X에서는 libiconv를 https://opensource.apple.com/에서 선택하여 직접 컴파일 할 수 있습니다. 그러나이 버전은 GNU libiconv 1.11을 기반으로합니다. 즉, 상당히 오래된 버전입니다.

  • GNU libiconv의 README에서 설명한대로 LIBICONV_PLUG 플래그는 시스템의 기능을 대체 할 라이브러리를 만듭니다. 이것은 GNU, Solaris 및 OSF/1에서만 작동합니다. 당신은 단지 GNU 일부 무료 소프트웨어 패키지 (예 : libxml2를 등)에 의해 사용될 수 libiconv가하려는 경우에,

는, 가장 간단한 방법은 첫 번째 방법을하는 것입니다, 그 패키지, 사용 컴파일하는 동안 -I와 -L 옵션은 GNU libiconv 헤더 파일과 라이브러리를 찾습니다.

사실

는 libxml2를 쉽게이 만드는 : 그것의 구성 스크립트는 이미 당신이 접두사에 대한 GNU libiconv (헤더 파일을 설치 한 디렉토리 계층 구조를 지정하는 통해 --with-의 iconv 옵션 = 접두사을 가지고/include 및 오브젝트 파일 접두어/lib /); configure 스크립트는 적절한 -I 및 -L 옵션을 합성합니다.

+0

이 유익하고 철저한 답변에 매우 감사드립니다. – Sossisos

관련 문제