Связывание библиотеки 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.

0 ответов

Другие вопросы по тегам