首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译GDAL cpp文件时出现Intel one-api编译器错误

编译GDAL cpp文件时出现Intel one-api编译器错误
EN

Stack Overflow用户
提问于 2021-06-23 22:19:34
回答 1查看 87关注 0票数 0

我的目标是编译gdal cpp文件,作为编译水文模型的一个迷你阶段。为此,我在Ubuntu上安装了英特尔OneAPI基础工具包。使用它的编译器icpx,我尝试编译gdal cpp文件。但是,它会抛出与找不到头文件和从这些头文件中读取所需类相关的错误。所有标头都包含在cpp文件中,并且它们完全位于cpp文件的同一目录中。任何帮助都将不胜感激。

代码语言:javascript
复制
 icpx /media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp -Imedia/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port '''

错误:

代码语言:javascript
复制
media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1341:17: error: use of undeclared identifier 'CPLErrorHandlerAccumulatorStruct'; did you mean 'CPLErrorHandlerAccumulator'?
    std::vector<CPLErrorHandlerAccumulatorStruct>* paoErrors =
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                CPLErrorHandlerAccumulator
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1338:18: note: 'CPLErrorHandlerAccumulator' declared here
void CPL_STDCALL CPLErrorHandlerAccumulator( CPLErr eErr, CPLErrorNum no,
                 ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1341:52: error: use of undeclared identifier 'paoErrors'
    std::vector<CPLErrorHandlerAccumulatorStruct>* paoErrors =
                                                   ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1342:26: error: no template named 'vector' in namespace 'std'
        static_cast<std::vector<CPLErrorHandlerAccumulatorStruct> *>(
                    ~~~~~^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1342:33: error: use of undeclared identifier 'CPLErrorHandlerAccumulatorStruct'; did you mean 'CPLErrorHandlerAccumulator'?
        static_cast<std::vector<CPLErrorHandlerAccumulatorStruct> *>(
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                CPLErrorHandlerAccumulator
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1338:18: note: 'CPLErrorHandlerAccumulator' declared here
void CPL_STDCALL CPLErrorHandlerAccumulator( CPLErr eErr, CPLErrorNum no,
                 ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1344:5: error: use of undeclared identifier 'paoErrors'
    paoErrors->push_back(CPLErrorHandlerAccumulatorStruct(eErr, no, msg));
    ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1344:26: error: use of undeclared identifier 'CPLErrorHandlerAccumulatorStruct'; did you mean 'CPLErrorHandlerAccumulator'?
    paoErrors->push_back(CPLErrorHandlerAccumulatorStruct(eErr, no, msg));
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         CPLErrorHandlerAccumulator
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1338:18: note: 'CPLErrorHandlerAccumulator' declared here
void CPL_STDCALL CPLErrorHandlerAccumulator( CPLErr eErr, CPLErrorNum no,
                 ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1348:6: error: variable has incomplete type 'void'
void CPLInstallErrorHandlerAccumulator(std::vector<CPLErrorHandlerAccumulatorStruct>& aoErrors)
     ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1348:45: error: no member named 'vector' in namespace 'std'
void CPLInstallErrorHandlerAccumulator(std::vector<CPLErrorHandlerAccumulatorStruct>& aoErrors)
                                       ~~~~~^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1348:52: error: use of undeclared identifier 'CPLErrorHandlerAccumulatorStruct'; did you mean 'CPLErrorHandlerAccumulator'?
void CPLInstallErrorHandlerAccumulator(std::vector<CPLErrorHandlerAccumulatorStruct>& aoErrors)
                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                   CPLErrorHandlerAccumulator
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1338:18: note: 'CPLErrorHandlerAccumulator' declared here
void CPL_STDCALL CPLErrorHandlerAccumulator( CPLErr eErr, CPLErrorNum no,
                 ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1348:87: error: use of undeclared identifier 'aoErrors'
void CPLInstallErrorHandlerAccumulator(std::vector<CPLErrorHandlerAccumulatorStruct>& aoErrors)
                                                                                      ^
/media/sf_Share/IMWEBsModel/imwebs_Linux/WetSpaInterface2/gdal/gdal-3.3.0/port/cpl_error.cpp:1348:96: error: expected ';' after top level declarator
void CPLInstallErrorHandlerAccumulator(std::vector<CPLErrorHandlerAccumulatorStruct>& aoErrors)
                                                                                               ^
                                                                                               ;
12 errors generated.
'''

更新:更多说明:主cpp程序具有以下类:

代码语言:javascript
复制
static
void CPL_STDCALL CPLErrorHandlerAccumulator( CPLErr eErr, CPLErrorNum no,
                                              const char* msg )
{
    std::vector<CPLErrorHandlerAccumulatorStruct>* paoErrors =
        static_cast<std::vector<CPLErrorHandlerAccumulatorStruct> *>(
            CPLGetErrorHandlerUserData());
    paoErrors->push_back(CPLErrorHandlerAccumulatorStruct(eErr, no, msg));
}


void CPLInstallErrorHandlerAccumulator(std::vector<CPLErrorHandlerAccumulatorStruct>& aoErrors)
{
    CPLPushErrorHandlerEx( CPLErrorHandlerAccumulator, &aoErrors );
}

void CPLUninstallErrorHandlerAccumulator()
{
    CPLPopErrorHandler();
}

在这个类中,它尝试调用CPLErrorHandlerAccumulatorStruct,这是名为cpl_error_internal的头文件中的另一个类,它包含在cpp主文件的开头-->

代码语言:javascript
复制
#include "cpl_error_internal.h"

我猜问题是主程序找不到头文件!虽然1)它被包括在内2)目录没有问题。

EN

回答 1

Stack Overflow用户

发布于 2021-07-16 16:39:37

我认为您没有正确配置gdal。在编译代码之前,尝试在gdal主目录中使用./configure命令来配置gdal,然后使端口目录正确,因为如果您没有正确配置端口目录,则会出现与未声明标识符"paoErrors“等相关的错误,而只需尝试编译”port“目录中的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68101671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档