Существует два варианта yaml-cpp:
https://github.com/jbeder/yaml-cpp
https://github.com/jbeder/yaml-cpp.new-api
В первом рассматриваемом символе объявлен элемент static const std::string& empty_scalar();
.Во втором он объявлен как член static std::string empty_scalar;
.
Два имени символа, которые вы видите, соответствуют этим двум различным объявлениям.Это не должно быть разрешено компилятором, если он видит empty_scalar
, объявленный непоследовательно, как это.
Я думаю, вы связали объектные файлы, которые были скомпилированы с различными версиями заголовочного файла, который объявил символ.Затем компоновщик будет считать эти два символа разными из-за их разных имен.В объектном файле, который вы использовали, действительно содержалось определение для варианта old-api, но какой-то код использует новый.