问题记录:Conan包管理器出现由于Id不对找不到二进制
Conan是根据id决定二进制兼容性的!
如果依赖项目计算出的“需要”的id跟你已有缓存中“已有”id不同就认为这个缓存不能用,要重新编译。
这次的问题出在DBoW库需要旧版opencv(requires=['opencv/2.几']),而项目中已经依赖了最新版opencv,导致新版opencv的require“覆盖”了旧版opencv的require。结果id不同,Conan表示必须重编译!但我给的只有预编译的二进制,没有编译规则(我也不想让它重编译,太慢了),因此报错。
解决方案就是强制要求使用旧版,不允许依赖者覆盖我的require!方法就是这样写conanfile:
...
requires=[(opencv/2.几几,'private')]
...
默认是override模式,改成private模式即可。