Windows 64位使用MinGW编译Numba源码生成wheel时报链接错误求助
编译报错根因
链接阶段抛出的undefined reference to __imp__Numba_hashtable_*类错误是核心问题,触发原因如下:
- Numba源码针对Windows平台的公共函数默认标记了
dllimport属性,但你使用MinGW编译时,_hashtable.c的实现没有对应生成dllexport导出符号,导致_typeof.c引用的导入符号找不到实际实现,链接失败。 - Numba官方的构建配置默认适配Visual Studio编译器,没有兼容MinGW的符号导出规则。
- 开头的Distutils导入顺序警告也可能引发不可预期的构建错误,需要优先修复。
修复配置步骤
- 修复Distutils导入顺序问题,执行编译命令时优先导入setuptools,替换原有编译命令为:
py -c "import setuptools; exec(open('setup.py').read())" bdist_wheel - 编译前添加导出符号宏定义,解决符号不匹配问题,在cmd中依次执行:
set CFLAGS=-DNUMBA_EXPORT_SYMBOLS %CFLAGS% set CXXFLAGS=-DNUMBA_EXPORT_SYMBOLS %CXXFLAGS% rd /s /q build - 可选优化:如果不需要TBB支持,可在编译命令后添加
--without-tbb参数,消除TBB未找到的警告,避免额外依赖引入问题。 - 可选消除无效警告:修改setup.py中编译器参数配置,移除仅适用于C语言的
-Wstrict-prototypes参数,避免C++编译时的参数无效警告。
内容的提问来源于stack exchange,提问作者gaurav1207
相关产品推荐
相关产品推荐

