2013-08-22 3 views
1

Я использую mingw-w64 (4.8.0) + cmake для создания разделяемых библиотек для yaml-cpp (0.5.1). Проект имеет несколько целей сборки в CMakeLists.txt, который поставляется вместе с ним: основная библиотека yaml-cpp и некоторые тестовые программы, например. parse, который связывает библиотеку.undefined reference linking yaml-cpp program with mingw-w64 + cmake

Целевая библиотека yaml-cpp сама построена без ошибок, но следует эту ошибку, когда parse построен:

Linking CXX executable parse.exe 
CMakeFiles\parse.dir/objects.a(parse.cpp.obj):parse.cpp:(.text+0x1a3): undefined reference to `YAML::Load(std::istream&)' 
CMakeFiles\parse.dir/objects.a(parse.cpp.obj):parse.cpp:(.text+0x1b2): undefined reference to `YAML::operator<<(std::ostream&, YAML::Node const&)' 
c:/work/mingw64-4.8/bin/../lib/gcc/x86_64-w64-mingw32/4.8.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\parse.dir/objects.a(parse.cpp.obj): bad reloc address 0x0 in section `.data' 
collect2.exe: error: ld returned 1 exit status 
util\CMakeFiles\parse.dir\build.make:90: recipe for target 'util/parse.exe' failed 
mingw32-make[3]: *** [util/parse.exe] Error 1 
CMakeFiles\Makefile2:228: recipe for target 'util/CMakeFiles/parse.dir/all' failed 
mingw32-make[2]: *** [util/CMakeFiles/parse.dir/all] Error 2 
CMakeFiles\Makefile2:240: recipe for target 'util/CMakeFiles/parse.dir/rule' failed 
mingw32-make[1]: *** [util/CMakeFiles/parse.dir/rule] Error 2 
makefile:211: recipe for target 'parse' failed 
mingw32-make: *** [parse] Error 2 

Я бегу на подобные ошибки, когда я пытаюсь писать небольшие тестовые программы, используя библиотеку, и я не знаю, что не так. Что может быть проблемой здесь?

+2

Это может быть связано с этой проблемой на странице проекта: https://code.google.com/p/yaml-cpp/issues/detail?id=216 –

ответ

1

Комментарий Джесси Бедера указывает на точный вопрос, вызывающий ошибку, описанную в вопросе. Быстрое исправление, в то время как исправление в последующей версии - применить исправление (https://code.google.com/p/yaml-cpp/issues/detail?id=216#c4) к чистой копии yaml-cpp 0.5.1. Также есть строка, которая объявляет std::string node_data::empty_scalar в исходном файле src/node_data.cpp, который должен быть прокомментирован. После внесения этих изменений общие библиотеки и утилиты создаются без ошибок.