2012-11-30 3 views
5

mingw gcc와 msys를 사용하여 여러 GNU 유틸리티를 빌드하고 있습니다. 과거에는 여러 버전의 libiconv를 필요로하는 여러 실행 파일 때문에 많은 문제가 발생했습니다. 따라서이 문제를 피하기 위해 iconv를 실행 파일에 정적으로 연결하려고했습니다.msys를 사용하여 Windows에서 iconv를 정적으로 어떻게 링크합니까?

저는 configure와 --enable-static을 사용하여 mingw와 msys를 사용하여 libiconv를 빌드했습니다. 이렇게하면 DLL, .dll.a 가져 오기 라이브러리 및 일반 .a 정적 라이브러리가 모두 만들어집니다.

그러나 단순한 -liconv와 링크하는 다른 프로그램을 만들려고 할 때 DLL이 링크되어 있습니다. ld가 정적 라이브러리보다 가져 오기 라이브러리를 선호하는 이유가 있다고 가정합니다. 일반적으로 이것은 특별한 경우입니다).

내가 작성한 프로그램이 정적으로 링크되도록하려면 어떻게해야합니까? 한 가지 분명한 접근법은 빌드를 수행하는 동안 .dll.a 파일을 제거하는 것입니다. 아마 가장 간단한 옵션이지만, 궁금합니다 - (LDFLAGS와 같은 것을 통해) iconv가 정적으로로드되도록 (이상적으로는 다른 라이브러리에는 영향을주지 않고) 설정할 수있는 링커 플래그가 있습니까? 모든 라이브러리를 정적으로로드하는 경우)

답변

1

기본적으로 정적 링크를 지정하지 않으면 기본적으로 "공유"링크가 설정됩니다. 당신이 당신이

make CC='gcc -static' 
make LDFLAGS=-static 
make LDFLAGS=libiconv.a 

당신은 단지 Makefile보고에 맞게 최소한의 침입 방법을 찾을 필요가 작동 중 몇 가지 방법을 할 수 있습니다. 아마도

Example

+0

처음 두 * 모든 것을 * 정적으로 연결합니다. 반면 세 번째 라이브러리는 iconv를 정적으로 링크합니다 (zlib과 같은 다른 라이브러리는 여전히 dll에 링크됩니다). –

+0

또는 '-Wl, -Bstatic, -liconv' –

관련 문제