2014-09-21 2 views
0

загрузить SDK с официального сайта, а также создать новый проект с помощью следующих команд:Нерешенные внешние символы защищены: «пустота __thiscall cocos2d :: Console :: петля (аннулируются)»

cocos new foo -p com.foo.bar -l cpp -d . 

Таким образом, новый проект foo и я вхожу в его каталог. Я знаю, что proj.win32 имеет файлы решений для предварительно созданной визуальной студии. Но я хочу восстановить их с CMakeLists.txt в корневом каталоге проекта.

Итак, я mkdir -p cmake-out/vs2012, введите каталог и . Все в порядке, файлы решений построены cmake, поэтому я перестроил целое решение в visual studio. Компиляция все прошло *, но окончательный процесс ссылка не потому, что следующие ошибки:

4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::loop(void)" ([email protected]@[email protected]@IAEXXZ)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::addClient(void)" ([email protected]@[email protected]@IAEXXZ)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::commandExit(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::loop(void)" ([email protected]@[email protected]@IAEXXZ)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::commandUpload(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::loop(void)" ([email protected]@[email protected]@IAEXXZ)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: void __thiscall <lambda_18a69eabc233d9cfc5fb2fb65c07cfe6>::operator()(void)const " (??R<lambda_18a69eabc233d9cfc5fb2fb65c07cfe6>@@QBEXXZ)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"protected: void __thiscall cocos2d::Console::loop(void)" ([email protected]@[email protected]@IAEXXZ)' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 
4>cocos2d.lib(CCConsole.obj) : error LNK2019: unresolved external symbol '[email protected]' referenced in function '"public: bool __thiscall cocos2d::Console::listenOnTCP(int)" ([email protected]@[email protected]@[email protected])' 

Оригинальное решение не имеют никаких ошибок, я знаю. Но файлы визуальных студийных решений должны быть сгенерированы cmake, какая проблема с CMakeLists.txt?


*: На самом деле, включают в себя настройки каталогов не правильно, поэтому я пропатчить их:

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/Classes 
    ${COCOS2D_ROOT} 
    ${COCOS2D_ROOT}/cocos 
    ${COCOS2D_ROOT}/cocos/audio/include 
    ${COCOS2D_ROOT}/cocos/2d 
    ${COCOS2D_ROOT}/cocos/2d/renderer 
    ${COCOS2D_ROOT}/cocos/2d/platform 
    ${COCOS2D_ROOT}/cocos/2d/platform/desktop 
    ${COCOS2D_ROOT}/cocos/2d/platform/win32 
    ${COCOS2D_ROOT}/cocos/base 

с ними:

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/Classes 
    ${COCOS2D_ROOT} 
    ${COCOS2D_ROOT}/cocos 
    ${COCOS2D_ROOT}/cocos/audio/include 
    ${COCOS2D_ROOT}/cocos/2d 
    ${COCOS2D_ROOT}/cocos/renderer 
    ${COCOS2D_ROOT}/cocos/platform 
    ${COCOS2D_ROOT}/cocos/platform/desktop 
    ${COCOS2D_ROOT}/cocos/platform/win32 
    ${COCOS2D_ROOT}/cocos/base 

Да, renderer, platform ... не в cocos/2d пути. Это единственное изменение, которое я должен сделать для источников.

+1

Возможный дубликат [Отказ от ссылки на соответствующие библиотеки/объектные файлы или компиляцию файлов реализации] (http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol- error-and-how-do-i-fix/12574400 # 12574400) «В программировании Windows контрольный знак, что вы не связали нужную библиотеку, состоит в том, что имя неразрешенного символа начинается с __imp_." –

+0

@RaymondChen: Это не дубликат, это проблема с cocos2d. В принципе, sdk должен генерировать правильное решение для вас, но не может этого сделать. – SigTerm

+0

Решение такое же: добавьте недостающие библиотеки. –

ответ

0

В случае, если кто-то снова споткнется на этот вопрос.

Это происходит потому, что cocos2d cmakelists.txt не удается связать с библиотекой ws2_32 на windows platofrm. По-видимому, никто никогда не использовал cocos2d-x для разработки Windows или что-то еще? Так или иначе.

Чтобы устранить эту проблему, найдите target_link_libraries в разделе CMakeLists.txt и измените его.

Ищет:

target_link_libraries(${APP_NAME} 
    spine 
    cocostudio 
    cocosbuilder 
    extensions 
    audio 
    cocos2d 
) 

И заменить его:

if(WIN32 AND MSVC) 
    target_link_libraries(${APP_NAME} 
    spine 
    cocostudio 
    cocosbuilder 
    extensions 
    audio 
    cocos2d 
    box2d 
    ws2_32 
) 
else() 
    target_link_libraries(${APP_NAME} 
    spine 
    cocostudio 
    cocosbuilder 
    extensions 
    audio 
    cocos2d 
    box2d 
) 
endif() 

Надеется, что будет решить эту конкретную проблему, и все это будет компилировать, не сталкиваясь другим вопрос.

Смежные вопросы