2013-05-15 6 views
5

내가 mingw64를 사용하여 GDAL-1.10.0 (http://trac.osgeo.org/gdal/wiki/DownloadSource)를 구축을 위해 노력했다 ( http://sourceforge.net/projects/mingwbuilds/files/host-windows/ 에서 x64-4.8.0 출시 - POSIX-SEH-rev2.7z을 (와 Mingw는-빌드)). 나는 문제없이 표준 MinGW (32 비트) 버전으로 gdal-1.10.0을 컴파일했다.링크 오류가

내가 mingw64로 전환해야하는 이유는 잘 같은 다른 기능을 표준 32 비트는 MinGW 배포 이 std::thread 같은 C++ 11 개 기능을 지원하지 않으며, (나는 생각한다)이다. 그러나 나는 (내가 이 mingw64 /와 Mingw - 빌드에서 32 비트 변형을 사용하는 경우 또는 다른 장식 이름) 마지막에 링크 오류가

undefined reference to '__imp_GetACP' 

에 대해 나에게 무언가를 말하는 얻을. BTW, 64 비트, 32 비트, seh, sjlj를 포함하여 mingw64의 다른 버전을 시도했지만 모두 GetACP()에 대해 동일한 오류가 발생했습니다.

내가 숙제를하고 유사한 컴파일 작업에 대한 몇 가지 지침을 발견 : http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env 위의 웹 사이트에 따라, 그들이 문제가 될 수 없다 WOW64 및 Windows DLL 파일의 올바른 버전 을하는 것이 좋습니다 것 같다 왜냐하면 창이 32 비트 또는 64 비트 응용 프로그램 호출 여부에 따라 자동으로이를 결정하기 때문입니다. 컴파일러 gcc는 64 비트이지만 msys는 절망적으로 32 비트이므로 mingw64 에 대한 문제 일 것입니다.

그러나 32 비트 버전을 사용해 본 결과, 위의 내용은 오류를 설명하는 것으로 보이지 않습니다. GetACP(), 에 대한 모든 호출을 주석 처리하기 위해 더러운 방법을 시도했습니다. 왜냐하면 코드 페이지와 모든 것을 내 용도로 사용하지 않기 때문입니다. 이상하게도 컴파일은 괜찮습니다 (GetACP()이 주석 처리 된 새로운 소스에서). 그러나 동일한 링크 오류가 여전히보고됩니다. libkernel32.a, libiconv.alib 폴더에 있고 위의 블로그의 지침에 따라 c:\windows\system32에서 dll을 복사하고 적절한 이름을 변경하여 mingw 하위 폴더에 저장했는지 확인했습니다. 링크 오류가 남아 있습니다. 이것은 성공없이 이틀에 거의 2 일을 보낸 후에 해킹을 중단 한 곳입니다. 전체 소스 코드에 함수 호출이 하나도 포함되어 있지 않고 링크 오류가 계속 발생하는 이유를 이해할 수 없습니다.

누구나 gdal과 mingw64간에 발생한이 문제를 설명 할 수 있습니까? 어떻게 해결할 수 있습니까?

또한 mingw64에 대한 일반적인 질문은 실제로 posix 기능을 지원할 수 있습니까? x64-4.8.0-release-posix-seh-rev2.7z와 같은 패키지 이름이 표시되지만 MinGW 사람들은 은 결코 전체 posix를 지원하지 않는다고 말한 것을 기억합니다.

P. Windows Server 2008 R2 (64 비트)에서이 문제를 테스트하고 있습니다.


업데이트 : (와 Mingw - 빌드) MinGW64에서 GDAL-1.10.0를 구축하기위한 전체 단계는 다음과 같습니다

다음
$./configure 

, 편집 GDALmake.opt, GDAL_ROOT를 찾고 cygwin 드라이브 형식을 dos/mingw 형식으로 바꿉니다. 변경 :

GDAL_ROOT = /d/temp/build/gdal-1.10.0 

GDAL_ROOT = d:/temp/build/gdal-1.10.0 

에 교체

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) 

마지막으로

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv 

$ make && make install && cp apps/*.exe /usr/local/bin/ 

답변

4

실수로 같은 문제가 발생했습니다. 은 어쩌면 이것은는 MinGW 버그 또는 잘못된 구성 파일이지만,이 솔루션은, 예를 들어,

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) 

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv 

에서와 교체 링커 플래그의 끝에 -liconv을 추가하는 것입니다 GDALmake.opt 파일 (Mingw 디렉토리에서 파일의 GetACP를 검색하여 찾음).

+0

이것은 우수합니다. x64-4.8.1-release-posix-seh-rev0 (mingw-builds)을 사용하여 테스트되었습니다. 참고 : 이미 GDALmake.opt에 -liconv가있는 것으로 보입니다. 하지만, 어떻게 든 MinGW64 (mingw-builds 당)에서 선택되지 않았습니다. – tinlyx

+0

그럼 왜이 버그가 발생합니까? –