NM 符号名称略有不同
nm symbol names slightly different
我在一个共享库中有一个未定义的符号名称:
U _ZN5Daetk5Petsc3Sys10catchErrorEj
在应该解决此问题的共享库中,符号名称的最后一个字符不同:
000000000008c65e T _ZN5Daetk5Petsc3Sys10catchErrorEb
这两个共享库是使用相同的堆栈(gcc-7.3.0)编译的。
为什么会这样?如何解决这个问题?
以下是依赖 lib header.h 的相关代码。
extern "C" {
typedef struct
{
PyObject_HEAD
Daetk::Petsc::Sys* petscSys;
} DaetkPetscSys;
}
依赖库源.cpp。
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));
}
}
解析库标头.h(已清理)。
namespace Daetk {
namespace Petsc {
class Sys
{
public:
Sys();
virtual ~Sys();
bool catchError(bool error);
};
} } //Petsc::Daetk
解析库源.cpp(已清理)。
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;
}
问题是<stdbool.h>
在 hdf5 中给出了一些奇怪的_Bool is not a type
问题,当它的一个标头被包含在 Cython 编译中时。作为一个黑客,我注释掉了包含<stdbool.h>
并将bool重新定义为无符号int。这是符号名称不匹配问题的根源。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- NM 符号名称略有不同
- 即使存在NM报告符号,在运行时的符号查找错误也是如此
- nm 获取整个存档的未定义符号,而不是单独的目标文件
- LD 报告对 nm 找到的符号的未定义引用
- 以 nm 符号值为单位的偏移量
- 当 Boost.Exception 符号出现在'nm'输出中时,这意味着什么?它们会导致违反 ODR 吗?
- nm报告的未解析符号
- g++说引用是未定义的,即使' nm '列出了我的目标文件中的符号定义
- 奇怪的链接错误。找不到符号,尽管 nm 验证它在那里
- nm 命令输出中的"@@"符号是什么意思?
- 在抽象类中使用shared_ptr时,如何在nm或objdump中找到函数符号
- 未找到 dyld 符号,但 nm 报告其他情况(OS X 更新问题)