安装dlib执行cmake编译命令报错,无法生成.so文件
解决dlib编译时
list命名歧义导致的编译失败问题 我来帮你搞定这个编译卡住的问题!从报错信息来看,核心原因是命名空间冲突,导致编译器搞不清你代码里的list到底是指Boost Python的list还是STL的list,进而引发了一连串的编译错误。
错误原因拆解
list类型歧义:代码里直接使用了list关键字,但通过头文件间接引入了boost::python::list和std::list两个同名类型,编译器无法判断你要使用哪一个,这是所有错误的根源。- 参数类型不匹配:因为
list的歧义,编译器错误地把函数参数assignment识别成了int类型,而python_list_to_vector函数需要的是boost::python::object类型,自然就出现了函数调用不匹配的错误。 - 函数未定义:前面的编译错误导致
_max_cost_assignment函数根本没编译成功,所以最后绑定Python接口时就找不到这个函数了。
解决方案
方法一:修改源码明确命名空间(最直接有效)
直接编辑出错的文件/home/kshitij/src/dlib-18.16/tools/python/src/other.cpp:
- 找到第56行的
list _max_cost_assignment (,把list替换成boost::python::list - 找到第69行的
const list& assignment,同样替换成const boost::python::list& assignment
这样就明确告诉编译器你要使用的是Boost Python提供的list类型,彻底解决命名冲突问题。
方法二:升级dlib版本(推荐长期方案)
你使用的dlib 18.16是比较老旧的版本了,这类命名空间冲突的问题在后续的dlib版本(比如19.x及以后)中已经被修复。如果你的项目允许,建议下载最新版的dlib重新编译安装,既能解决当前问题,也能避免其他潜在的兼容性bug。
重新编译
修改完源码(或者升级版本)后,重新执行编译命令:
cmake --build . --config Release
这样应该就能顺利生成.so文件了!
内容的提问来源于stack exchange,提问作者Kshitij Bari
相关产品推荐
相关产品推荐

