2017-11-21 1 views
1

expat 라이브러리를 기반으로 C 헤더 및 소스 파일에 작성된 XML 구문 분석 유틸리티 함수가 있습니다. 이것을 위해 정적으로 연결된 expat가있는 정적 라이브러리에 내 소스 파일을 컴파일했습니다.모든 기호가 해결 된 라이브러리를 다른 라이브러리에 정적으로 연결하는 방법

유틸리티 라이브러리와 expat를 응용 프로그램과 정적으로 연결하는 경우에만 사용할 수 있고 결과 xml 유틸리티 라이브러리의 기능을 내 응용 프로그램과 함께 사용할 수 있습니다. 필자는 응용 프로그램 실행 파일로 expat를 정적으로 다시 연결할 필요없이 내 유틸리티 라이브러리를 정적으로 만 연결하여 내 응용 프로그램을 빌드 할 수 있어야한다는 견해를 가지고있었습니다. 내 응용 프로그램을 유틸리티 라이브러리와 연결 만하면 expat에 대해 정의되지 않은 기호 오류가 발생합니다.

누락 된 부분을 누군가 안내해 줄 수 있습니까? 나는 gcc 컴파일러를 사용하고있다.

덕분에 ....

답변

1

"나는 정적으로 연결된 해외 거주자와 정적 라이브러리에 내 소스 파일을 컴파일."

나는 그렇게하지 않을 것을 두려워합니다. 정적 라이브러리는 링커에서 생성되지 않습니다. 연결이 필요 없기 때문에 아무 것도 연결할 수 없습니다. 정적 라이브러리는 ar archive format에있는 오브젝트 파일의 가방 일뿐입니다. 이 링커에서 생성 한 인 프로그램 또는 라이브러리 을 링크 할 때 이러한 링커에 가방을 제공 할 수 있습니다. 그것은 가방을보고 대상 파일을 꺼내어 링크를 수행하고 을 대상으로 연결합니다. 이 가방은 링커가 필요로하는 객체 파일을 정확히 알아야 할 필요가있는 의 어려움을 방지하지만, 가방 자체는 링키지에 전혀 기여하지 않습니다. 나는 단지 하나의 정적 라이브러리 내 실행 파일을 링크 할 수 있도록

나중에 내가 해외 거주자 정적 라이브러리를 얻을 수있는 방법

내 유틸리티 라이브러리에 포함되어 있습니다. 두 개의 아카이브를 추출하고 오브젝트 파일을 병합하지 않으려합니다.

두 개의 ar 아카이브를 결합하는 다른 방법은 없습니다.

libexpat 연결에 대한 귀하의 저항은 더 이상의 문맥없이 수수께끼입니다. 배포판의 패키지 관리자를 통해 을 사용할 수 있습니다. libexpat에 의존하는 라이브러리를 만들었습니다. 라이브러리를 연결하는 고객은 libexpat 링크가 필요합니다. 이것은 완전히 일상적인 종속성 이며 문서화 만하면되며 라이브러리를 패키징하는 경우에는 패키지 종속성에 을 포함해야합니다. 거의 항상 우리가 새로운 라이브러리를 작성할 때 라이브러리 이 이미 대상 사용자에서 사용 가능합니다. 모든 라이브러리가 정적으로 에 종속성을 모두 포함하면 모두 운영 체제의 크기가 될 것이므로 실용적인 것은 아닙니다.

+0

OK, 어떻게하면 내 유틸리티 라이브러리에 포함되어있는 expat 정적 라이브러리를 얻을 수 있는지 안내해 주시면 단일 정적 라이브러리와 내 실행 파일을 연결하기 만하면됩니다.두 개의 아카이브를 추출하고 오브젝트 파일을 병합하지 않으려합니다. – sbunny

+0

@sbunny 안녕하세요. 다른 방법은 없습니다. 업데이트를 참조하십시오. –

관련 문제