c++ - GDAL 未链接

标签 c++ linker gdal

我正在尝试让我的程序在 Windows 上运行。它依赖于GDAL,一个用于加载GIS数据的库。它在 Linux 和 macOS 上都能很好地编译和链接。我将 CMake 与 MinGW 一起使用,并且遇到了如下链接错误:

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*)'

我使用 VS2017 编译了 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})

我几乎从不在 Windows 上进行开发,所以我有点陷入困境。我也尝试过链接 dll,但没有成功。有什么想法吗?

最佳答案

显然您正在尝试将使用 VC++ 编译的库与对象链接起来 您使用 GCC (MinGW) 编译的文件。那是行不通的。 GCC 和 VC++ 有不同且不兼容 ABIs , 特别是不同的name mangling协议(protocol)。 因此,MinGW 在您的目标代码中发出的损坏的函数名称将 与您的 VC++ 编译库导出的任何内容都不匹配。您将需要 使用 MinGW 构建 GDAL 库。

关于c++ - GDAL 未链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842468/

相关文章:

c++ - 如何从 pjsip 发送电子邮件。是否有可用于发送电子邮件的默认方法

c++ - 检查已创建的结构成员实例

c++ - 重载派生类的比较运算符==以扩展任意数量的基类

c++ - 有没有办法检测内联函数 ODR 违规?

c++ - 为什么 C++ 链接器在构建期间需要库文件,即使我是动态链接的?

c++ - "object"中的 "object file"是什么,为什么这样调用它?

c++ - 使 ld 忽略/etc/ld.so.conf 中的目录

gdal - 哨兵 2 数据上 gdal2tiles.py 后的模糊输出

gdal - 如何使用 visual studio 在 QT 中制作 GUI?

python - django.contrib.gis.geos.error.GEOSException : Could not parse version info string