2010-05-22 6 views
3

사용하려는 오픈 소스 라이브러리가 있습니다. 소프트웨어를 바이너리 패키지로 퍼트하고 싶기 때문에 라이브러리가 다른 라이브러리에 의존하는 것을 원하지 않기 때문에 의존성을 정적으로 연결해야합니다.정적으로 링크 된 의존성을 사용하여 autotools 프로젝트를 컴파일하려면 어떻게해야합니까?

이제 라이브러리가 오픈 소스이고 제공되는 바이너리가 없으므로 직접 컴파일합니다. 라이브러리는 autotools를 사용하며 의존성을 정적으로 연결하는 방법에 대한 유용한 문서를 찾지 못했습니다. 제가 시도한 것은 --enable-static으로 configure 스크립트를 호출하는 것입니다. 그러나 이는 분명 configure가 라이브러리의 정적 버전을 컴파일하도록 지시합니다. 그러나 필요한 것은 의존하는 모든 라이브러리를 포함하는 동적 라이브러리입니다.

그래서 필자는 dependancies에 정적으로 링크하도록 configure에 지시하거나 빌드 된 라이브러리를 모든 종속성을 포함하도록 사후 처리하는 방법을 필요로합니다. 아무도 이걸하는 방법을 말해 줄 수 있습니까?

아, 그리고 중요한 점은 : 저는 64 비트 Snow Leopard입니다.

답변

2

최근에이 경로를 자신 추락하는 데, 나는 불행하게도 정적 라이브러리가 실제로 이런 식으로 작동하지 않는 것을 발견했다.

정적 실행 가능 바이너리를 생성하면 링커는 필요한 모든 기능을 확인한 다음 제공된 라이브러리 목록을보고 필요한 각 기능에 대한 코드를 가져옵니다.

정적 라이브러리를 만들면 링크가 수행되지 않으므로 컴파일 된 코드는 모두 .a 정적 라이브러리에 압축되어 (실제로는 ar을 사용하지만 기능적으로는 zip과 같습니다). ('a'는 'archive'의 약자입니다.) 링크 단계가 없으므로 라이브러리에서 사용하는 함수 호출을 검사하는 방법은 없습니다. 그것은 단지 나중에 해결 될 '해결되지 않은 외부'무리를 가지고 있습니다.

즉, 바이너리를 링크 할 때 필요한 모든 기능 (자신의 코드가 사용하는 기능, 및 필요한 모든 라이브러리에서 사용하는 기능)에 대한 코드 (라이브러리)를 제공해야합니다..

모든 종속성이 포함 된 라이브러리를 제작하려는 이유를 절대적으로 볼 수 있습니다. 그러나 내가 말할 수있는 한 그렇게 작동하지는 않습니다. 그렇기 때문에 pkg-config과 같은 프로그램이 있습니다.이 프로그램을 사용하여 (정적 또는 동적) 라이브러리를 사용자에게 알려주고 어떤 종속 라이브러리가 사용자의 라이브러리를 사용하도록 알려줄 수 있습니다.

마지막으로 연결할 라이브러리의 라이센스를 확인하십시오. 라이브러리가 오픈 소스이기 때문에 그것이 링크를 통해 벗어날 수 있다는 것을 의미하지는 않습니다. GPL 라이브러리 인 경우 GPL 라이브러리에 링크하면 GPL에 따라 자신의 소스 코드를 공개하는 데 동의하게됩니다. 원하지 않을 수도 있습니다.

2

.a 파일이 있으면 프로젝트의 Makefile.am에 다음을 추가 할 수 있습니다.

yourproject_LDADD = libxxx.a 
+0

이 오래된 질문을 찾아 주셔서 감사합니다. 그러나 이것은 실제 답변이 아닙니다. 정말 라이브러리와 모든 종속성을 포함하는 DLL을 갖고 싶습니다. 또한 autotools를 직접 사용하지 않습니다. – flyx

관련 문제