首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nm符号名称略有不同

nm符号名称略有不同
EN

Stack Overflow用户
提问于 2018-04-25 05:40:57
回答 1查看 84关注 0票数 0

我在一个共享库中有一个未定义的符号名称:

U _ZN5Daetk5Petsc3Sys10catchErrorEj

在应该解决此问题的共享库中,符号名称的最后一个字符不同:

000000000008c65e T _ZN5Daetk5Petsc3Sys10catchErrorEb

这两个共享库使用相同的堆栈进行编译(gcc-7.3.0)。

为什么会发生这种情况?如何解决这个问题?

下面是依赖lib header.h的相关代码。

代码语言:javascript
复制
extern "C" {
typedef struct
{
  PyObject_HEAD
  Daetk::Petsc::Sys* petscSys;
} DaetkPetscSys;
}

依赖库source.cpp。

代码语言:javascript
复制
extern "C" {
static PyObject* 
DaetkPetscSys_catchError(DaetkPetscSys *self, PyObject *args)
{
  bool error;
  if(!PyArg_ParseTuple(args,"b",&error)) return NULL;
  return Py_BuildValue("b",self->petscSys->catchError(error));
}
}

解析库header.h (已清理)。

代码语言:javascript
复制
namespace Daetk {
namespace Petsc {
class Sys
{  
public:
  Sys();
  virtual ~Sys();
  bool catchError(bool error);
};
} } //Petsc::Daetk

解析库source.cpp (已清理)。

代码语言:javascript
复制
bool Daetk::Petsc::Sys::catchError(bool error)
{
  using namespace cc;
  int thisVal=error;
  int result=error;
  MPI_Allreduce(&thisVal,&result,1,MPI_INT,MPI_LOR,PETSC_COMM_WORLD);
  return result;
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-25 06:38:47

问题是,当<stdbool.h>的一个头文件被包含在hdf5编译中时,它在Cython中出现了一些奇怪的_Bool is not a type问题。作为一个技巧,我注释掉了<stdbool.h> include,并将bool重新定义为unsigned int。这是符号名称不匹配问题的根源。

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

https://stackoverflow.com/questions/50011088

复制
相关文章

相似问题

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