2012-02-01 1 views
2

iconv 기능과 libxml2를 모두 사용하는 응용 프로그램이 있습니다.특정 포함에 대한 포함 경로를 수정하는 방법

libxml2는 /usr/local에 설치되어 있으므로 컴파일러 플래그 -I/usr/local/include을 사용하고 있습니다. /usr/local에 독립 실행 형 libiconv 설치가 있습니다. 사용하고 싶지 않습니다 (glibc에서 하나를 사용하고 싶습니다). 내 응용 프로그램 코드 내에서

, 나는 수행하여의 iconv 문제를 정렬 할 수 있습니다

#include </usr/include/iconv.h> 

그러나, 문제는 libxml2를 물건 또한 자신의 내부 목적의 iconv 사용하고 있다는 점이다. 그리고 libxml2 헤더는 단지 다음을 수행합니다 :

#include <iconv.h> 

주위에는 어떤 방법이 있습니까? 예를 들어, 어디에서 libxml 헤더를 포함하는지, iconv를 검색 할 위치를 알려주는 코드에서 무엇을 할 수 있습니까?

답변

1

먼저 iconv를 사용하지 않는 원본에서도 libxml2 헤더 앞에 올바른 <iconv.h>을 포함하십시오. 이렇게하면 libxml 헤더가 다른 버전을 포함하지 않게됩니다 (헤더 가드가 같다고 가정하면 ...).

장기간 수정하려면 시스템을 수정해야합니다 (실제로는 고장 났기 때문에). /usr/local에 패키지를 설치할 수 없으며 나중에 개별적으로 활성화 또는 비활성화 할 수 있어야합니다. 대신 별도의 접두어로 패키지를 설치하십시오. 예를 들어, /opt/libxml2에 libxml2를 설치하고 /opt/iconv에 iconv를 설치하십시오.

+0

완벽하게 작동합니다. 나중에 기계 구성을 분류 할 수 있기를 바랍니다. 공유 머신이지만 잘못 설치 한 사람은 나였습니다. 내장 된 iconv가 기본 문자 세트 (예 : UTF-8)가 부족한 오래된 AIX 상자에서 프로젝트를 복사하여 동일한 GNU를 빌드했습니다. iconv 라이브러리를 사용하여 Linux에서 작동하도록합니다. – asc99c

0

-I/usr/include -I/usr/local/include을 수행하면 gcc가 시스템 헤더를 다르게 처리하므로 작동하지 않는다는 점을 제외하고는 gcc가/​​usr/include first ...를 검색해야합니다. 추한 해킹으로 /usr/include/iconv.h를 다른 디렉토리에 복사하고/usr/local/include 앞에 -I 플래그로 지정할 수 있습니다.