2017-10-20 22 views
0

Windows에서 프로그램을 실행하려고합니다. GDAL은 GIS 데이터를로드하는 라이브러리입니다. 그것은 리눅스와 macOS 모두에서 컴파일되고 잘 링크됩니다. 저는는 MinGW와 CMake를 사용하고 있는데 나는이 같은 연결 오류로 실행 해요 : VS2017와GDAL 연결 안 함

undefined reference to `GDALRasterBand::RasterIO(GDALRWFlag, int, int, int, int, void*, int, int, GDALDataType, long, long, GDALRasterIOExtraArg*)' 
CMakeFiles\Routes.dir/objects.a(elevation.cpp.obj): In function `ZN13ElevationData9calcStatsEv': 
C:/Users/Logan/Documents/Routes/src/elevation/elevation.cpp:138: undefined reference to `GDALDataset::GetRasterXSize()' 
C:/Users/Logan/Documents/Routes/src/elevation/elevation.cpp:139: undefined reference to `GDALDataset::GetRasterYSize()' 
CMakeFiles\Routes.dir/objects.a(elevation.cpp.obj): In function `ZN13ElevationData17createOpenCLImageEv': 
C:/Users/Logan/Documents/Routes/src/elevation/elevation.cpp:206: undefined reference to `GDALRasterBand::RasterIO(GDALRWFlag, int, int, int, int, void*, int, int, GDALDataType, long, long, GDALRasterIOExtraArg*)' 

I 컴파일 GDAL을하고 난 내 CMake 파일에 지정하고 어디가 설치되어 있는지 확인했습니다. 다음은 CMakeLists.txt의 관련 부분입니다.

IF (WIN32) 

    message(STATUS "Compiling for Windows") 
    set(GDAL_LIBRARY "C:/warmerda/bld/lib/gdal_i.lib") 
    set(GDAL_INCLUDE_DIR "C:/warmerda/bld/include/") 

    find_package(OpenCL REQUIRED) 
    include_directories(${OpenCL_INCLUDE_DIRS}) 

ELSE() 

... 

message(STATUS ${GDAL_LIBRARY}) 
target_link_libraries(Routes ${GDAL_LIBRARY} ${OpenCL_LIBRARIES}) 

저는 거의 개발되지 않았기 때문에 저는 막혔습니다. 난 아무 소용뿐만 아니라 DLL에 대한 연결을 시도했다. 어떤 아이디어?

답변

2

분명히 VC++로 컴파일 한 라이브러리를 GCC (MinGW)로 컴파일하는 객체 파일과 연결하려고합니다. 그건 작동하지 않습니다. GCC와 VC++은 다르며 호환성이 없다. ABIs, 그리고 특히 다른 name mangling 프로토콜이다. 따라서 MinGW에서 객체 코드로 내 보낸 변경된 함수 이름은 과 VC++ 컴파일 라이브러리에서 내 보낸 것과 일치하지 않습니다. MinGW에서 GDAL 라이브러리를 빌드하려면 해야합니다.

+0

잠시 후 알아 냈습니다.하지만 게시 한 질문을 잊어 버렸습니다. – BlueSpud