Связывание библиотеки yaml-cpp 0.5.x с g++ 7.1.0

Я пытаюсь скомпилировать относительно простую программу, используя yaml-cpp 0.5.3 с g++ 7.1.0, и получаю ошибку компоновщика. Минимальный программный код:

#include <yaml-cpp/yaml.h>

int main(int i_iArg_Count, char * i_lpszArg_Values[])
{
    std::string cszFilename = i_lpszArg_Values[1];

    YAML::Node                              cFile;
    cFile = YAML::LoadFile(cszFilename);
    return 0;
}

Этот код прекрасно компилируется и компонуется в g++ 4.9.0, но в g++ 7.1.0 я получаю сообщение об ошибке

/tmp/ccJruju7.o: In function `main':
tyaml.cpp:(.text+0x19e): undefined reference to `YAML::LoadFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

Команда компиляции, которую я использую для этого случая, — g++ tyaml.cpp -lyaml-cpp -o tyaml. Я могу подтвердить, что это не проблема с путем к библиотеке - LIBRARY_PATH содержит правильный путь к libyaml-cpp.a, и g++ 4.9.0 прекрасно компилирует его с тем же путем. Более полный код использует больше yaml-cpp, и только функции, требующие std::string, вызывают проблему.

libyaml-cpp.a был скомпилирован с использованием g++ 7.1.0, поэтому я не думаю, что проблема связана с самой библиотекой. Я подтвердил, что библиотека включает символ YAML::LoadFile и принимает тип std::string const &.

Я не могу продолжать использовать старые версии g++ в системе, которую использую.

Я пробовал как yaml-cpp 0.5.1, так и yaml-cpp 0.5.3, обе страдают от одной и той же проблемы. Я подозреваю, что это какая-то проблема с реализацией std::string.


person Brian W. Mulligan    schedule 10.10.2017    source источник
comment
Он компилируется с gcc 7.2.0 и yaml-cpp 0.5.3-3.   -  person bezet    schedule 11.10.2017
comment
yaml-cpp 0.5.3 был чистой установкой и собран под gcc 7.1.0. Кажется, это связано с проблемой ABI; компиляция с -D_GLIBCXX_USE_CXX11_ABI=0 прошла успешно. Это проблема с настройкой make для yaml-cpp?   -  person Brian W. Mulligan    schedule 11.10.2017