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