c++ - 尝试使用 GDAL 的 GDALDataset::GetLayers() 编译时未定义的引用
问题描述
我正在尝试编译一些涉及 GDAL 的代码,但不断出现错误。它看起来像是GetLayers
在 gdal_priv.h 中定义的,但 Clion 报告该文件不属于任何项目目标,我对此表示怀疑。据此,它应该工作。其他poDS
工作方法,例如GetLayerByName
. 关于我可以在哪里看的任何想法?我想知道我的 cmakelists.txt 是否有误。
这是一些示例代码。我知道这poDS->GetFeatures();
是错误的,但我只是在测试。
主文件
#include "DisplayShapefile.h"
#include <iostream>
GDALDataset * Shapefile::read(const char *path) {
// Read shapefile from filesystem
GDALAllRegister();
GDALDataset *poDS;
poDS = (GDALDataset*) GDALOpenEx(path, GDAL_OF_VECTOR, NULL, NULL, NULL);
if( poDS == NULL ) {
printf( "Open failed.\n" );
exit ( 1 );
}
poDS->GetFeatures();
return poDS;
}
int Shapefile::get_layer_count(GDALDataset *dataset) {
// Get layer count contained by shapefile
return GDALDatasetGetLayerCount(dataset);
}
std::vector<std::string> Shapefile::layer_names(GDALDataset *dataset) {
std::vector<std::string> names;
for( auto&& poLayer: dataset->GetLayers() ) {
std::string name = poLayer->GetName();
names.push_back(name);
std::cout << "Layer " << name << std::endl;
}
return names;
}
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
制作清单
cmake_minimum_required(VERSION 3.17)
project(gdalTest)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_PREFIX_PATH "C:\\msys64\\mingw64")
find_package(GDAL REQUIRED)
include_directories ( include ${GDAL_INCLUDE_DIRS})
set(SOURCE_FILES C:/OSGeo4W64/include/gdal_priv.h)
add_executable(gdalTest main.cpp DisplayShapefile.h ${SOURCE_FILES})
target_link_libraries(gdalTest ${GDAL_LIBRARIES})
我得到的错误是:
CMakeFiles\gdalTest.dir/objects.a(main.cpp.obj): In function `Shapefile::read(char const*)':
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:19: undefined reference to `GDALDataset::GetFeatures()'
CMakeFiles\gdalTest.dir/objects.a(main.cpp.obj): In function `Shapefile::layer_names[abi:cxx11](GDALDataset*)':
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::GetLayers()'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::begin() const'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::end() const'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::operator!=(GDALDataset::Layers::Iterator const&) const'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::operator*() const'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::operator++()'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::~Iterator()'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::~Iterator()'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::~Iterator()'
C:/Users/rwardrup/CLionProjects/gdalTest/main.cpp:30: undefined reference to `GDALDataset::Layers::Iterator::~Iterator()'
解决方案
推荐阅读
- c - MAP_HUGETLB 未定义
- c++ - 调用 QML 处理程序,但使用“未定义”c++ 信号参数
- validation - ASP.NET CORE 3.1 中数据注释和错误验证消息的本地化
- python - 从另一列中减去日期时间。出现错误:-: 'str' 和 'str' 的操作数类型不受支持
- javascript - 从 eBay 中的 Find Items Advanced API 返回项目属性
- sql - 在 DISTINCT 查询之前在 SQL 中使用管道正则表达式
- ios - 尝试归档项目时出现 Xcode 错误:意外的重复任务
- python - 使用数据流模板读取大查询表
- list - 如何将列表的元素添加到哈希表?
- bash - 在 Bash 中匹配所有文件/目录名称(包括以点开头的名称)的最短表达式是什么?