2017-10-20 17 views
0

私のプログラムをWindowsで実行しようとしています。 GDALは、GISデータをロードするためのライブラリです。それはコンパイルし、LinuxとmacOSの両方でうまくリンクします。私はMinGWのでCMakeのを使用していると私は、このようなエラーのリンクに実行している:私はVS2017でGDALをコンパイルし、私は私のcmakeのファイルに指定していますどこがインストールされていることを確認した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*)' 

を。ここに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

関連する問題