У меня есть проект C ++ в Visual Studio 2010, где я переносю свой код из старого API yaml-cpp 0.3 в новый API 0.5. Я установил Boost, создал новые библиотеки DLL с помощью CMake, настроил пути включения и пути к библиотекам, обновил весь код, чтобы он соответствовал новому API, и все прекрасно скомпилировалось.
Тем не менее, когда он достигает ссылки, я сталкиваюсь с кучей ошибок компоновщика, как это:
error LNK2001: unresolved external symbol "public: static bool __cdecl YAML::convert<bool>::decode(class YAML::Node const &,bool &)"error LNK2001: unresolved external symbol "private: void __thiscall YAML::detail::node_data::insert_map_pair(class YAML::detail::node &,class YAML::detail::node &)"error LNK2001: unresolved external symbol "public: void __thiscall YAML::detail::memory_holder::merge(class YAML::detail::memory_holder &)"error LNK2001: unresolved external symbol "public: class YAML::detail::node & __thiscall YAML::detail::memory::create_node(void)"error LNK2001: unresolved external symbol "public: void __thiscall YAML::detail::node_data::mark_defined(void)"error LNK2001: unresolved external symbol "public: void __thiscall YAML::detail::node_data::set_null(void)"...
Похоже, что не все символы экспортируются в DLL, но я не знаю, как это исправить. Я пытался очистить все, перестроить, отладить / выпустить, разные версии VS и т. Д. С yaml-cpp 0.3 все работало нормально, но я действительно хочу новый API. Эти настройки я использую в CMake для сборки библиотеки:
APPLE_UNIVERSAL_BIN = false
BUILD_SHARED_LIBS = true
MSVC_SHARED_RT = true
MSVC_STHREADED_RT = false
YAML_CPP_BUILD_CONTRIB = false
YAML_CPP_BUILD_TOOLS = false
Это известная проблема. Вы можете следовать страница вопроса на странице проекта.
Других решений пока нет …