编译Minkowski Engine时遇std::to_address与cuda::std::to_address冲突求解决
解决Minkowski Engine编译时std::__to_address重载冲突问题
问题背景
执行以下命令编译Minkowski Engine 0.5.4时:
git clone https://github.com/NVIDIA/MinkowskiEngine.git cd MinkowskiEngine python setup.py install
出现如下编译错误:
error: more than one instance of overloaded function "std::__to_address" matches the argument list: function template "_Tp *cuda::std::__4::__to_address(_Tp *) noexcept" (declared at line 277 of /usr/local/cuda-12.4/targets/x86_64-linux/include/cuda/std/detail/libcxx/include/__memory/pointer_traits.h) function template "_Tp *std::__to_address(_Tp *) noexcept" (declared at line 156 of /usr/include/c++/9/bits/ptr_traits.h)
冲突来自标准库和CUDA标准库的__to_address函数重载,而代码并未直接调用该函数。
环境配置:
OS: Ubuntu 20.04 Python version: 3.8.10 Pytorch version: 2.2.1 CUDA version: 12.4 NVIDIA Driver version: 525.147.05 Minkowski Engine version 0.5.4
解决方法
方法1:升级到兼容CUDA 12.x的Minkowski Engine版本
Minkowski Engine 0.5.4发布时CUDA 12.x尚未推出,存在兼容性问题。直接切换到支持CUDA 12的新版本(如0.6.0及以上)即可解决:
# 克隆最新代码或指定兼容版本 git clone https://github.com/NVIDIA/MinkowskiEngine.git cd MinkowskiEngine # 可选:切换到稳定的兼容版本 git checkout v0.6.0 python setup.py install
方法2:修改0.5.4版本的编译参数(保留旧版本)
如果必须使用0.5.4版本,可通过添加编译宏强制指定使用标准库的__to_address实现:
- 打开项目根目录下的
setup.py文件 - 找到
extra_compile_args配置段,为cxx和nvcc添加-D__to_address=std::__to_address参数,修改后示例:
extra_compile_args = { 'cxx': [ '-D__to_address=std::__to_address', '-O3', '-fopenmp', '-std=c++17', # 其他原有参数... ], 'nvcc': [ '-D__to_address=std::__to_address', '-O3', '-std=c++17', # 其他原有参数... ] }
- 保存后重新执行
python setup.py install
方法3:降级CUDA到兼容版本
Minkowski Engine 0.5.4官方支持CUDA 11.0~11.7,卸载当前的CUDA 12.4,安装CUDA 11.7后重新编译即可避免冲突。
内容的提问来源于stack exchange,提问作者Megapiot
相关产品推荐
相关产品推荐

