在 C++ 中使用 numpy 数组的“未定义引用”错误
Posted
技术标签:
【中文标题】在 C++ 中使用 numpy 数组的“未定义引用”错误【英文标题】:"Undefined reference to" errors using numpy array in C++ 【发布时间】:2020-10-08 16:17:28 【问题描述】:我第一次尝试将一些 C++ 代码编译成 dll 以导入 Python。我希望能够从其中一个函数返回一个 Numpy 数组,示例行看起来像 lNumpyArray = PyArray_SimpleNewFromData( 2, lDimensions, NPY_UINT8, (void*)lImage->GetDataPointer() );
在代码的开头我包含了Python.h
和arrayobject.h
。
使用 GCC(在 Windows 上工作)我已经能够将代码编译为 .O 文件而没有错误。但是,当尝试访问 dll 时,我遇到了很多错误,例如 undefined reference to '__imp__Py_Dealloc'
。根据我有限的理解,这可能是因为我在链接器的某个地方缺少一个库。为了在 C 中使用 Numpy 数组,我是否需要包含其他一些库,或者我应该在别处寻找?我一直在使用的 gcc 命令如下。
gcc -Wall -shared Pipeline.cpp -I"C:/Python38/include" -I"C:/Program Files/Pleora Technologies Inc/eBUS SDK/Includes" -I "C:/Python38/Lib/site-packages/numpy/core/include" -L"C:/Python38/libs" -L"C:/Program Files/Pleora Technologies Inc/eBUS SDK/Libraries" -o lib.dll -lPvBuffer64 -lPvDevice64 -lPvStream64 -lPvAppUtils64 -lPvSystem64 -lSimpleImagingLib64 -lPvGenICam64 -lPvSerial64 -lPvBase64 -lPtUtilsLib64
【问题讨论】:
请将此设为minimal reproducible example。 你忘记链接python库了。 docs.python.org/3.8/extending/windows.html 您必须将 pythonXY.lib 传递给链接器。 【参考方案1】:我会避免使用 C Python 接口来 numpy 并使用库链接 xtensor (found here)。
【讨论】:
以上是关于在 C++ 中使用 numpy 数组的“未定义引用”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“对‘Shape::Shape()’的未定义引用 - 在 C++ 中构建失败 3 个错误”