运行 zypper 报错

所以不要把开发源的优先级调得比官方源还高,packman 源也是。

我回去看看这么调整优先级 :joy:

最近学到 gcc 编译的时候会进行一种 name mangling 的操作。就是在用户定义的名字周围加一些乱七八糟的东西来防止名字冲突。

ZN4YAML6detail9node_data12empty_scalarB5cxx11E 其实就是 YAML node_data empty_scalar

然后顺藤摸瓜,就能发现他们在两年前,把一个静态常量,直接变成了静态函数。

一年前,yaml-cpp 在 factory 里面升级到 0.6.3, 但是 zypper 一时半会不升级,于是我们就偶然地中招了。他们这样改,正确的操作应该是直接把版本号改成 0.7。

https://build.opensuse.org/request/show/760350

现在搜索 ZN4YAML6detail9node_data12empty_scalarB5cxx11E 能出来很多结果,估计还有一大堆的项目会陆陆续续中招。。。。。

Examples:
https://stackoverflow.com/questions/52713571/mongod-symbol-lookup-error-mongod-undefined-symbol-zn4yaml6detail9node-data
https://forums.opensuse.org/showthread.php/538693-Blender-failed-to-launch-after-update-symbol-lookup-error-undefine-symbol
https://bugzilla.opensuse.org/show_bug.cgi?id=1160171
https://bugzilla.redhat.com/show_bug.cgi?id=1773357
https://bugzilla.redhat.com/show_bug.cgi?id=1774164
https://bbs.archlinux.org/viewtopic.php?id=248014
jbeder/yaml-cpp#484

Yamlcpp 项目本身八成以上的锅。

1赞