Здравствуйте, товарищи! Возможно, вопрос немного не из той категории, не связанный напрямую с игростроем... Но я не нашел лучше места, где бы его задать. Преамбула: На сайте "I love Lua" наткнулся на интересную статью. В результате должен был получится GUI с тремя кнопками, к которым привязаны некоторые скрипты Lua. После обнадеживающего начала (следуя уроку, собрал dll-ку, lua-интерпретатор и fox-toolkit'овское окошко "Hello World"), когда дошел непосредственно к цели - магическому моменту слития Lua и кнопок - уткнулся в серию досадных, неучтенных автором, проблем. Мои познания в программировании ограничиваются консолью для С++ и INSTEAD'ом для Lua. Потому, побродив маленько по инету, пришел к вам за помощью. Кто прошел тот злополучные урок и просто искушенные в этом деле люди, пожалуйста, отзовитесь!
Проблемы начались при сборке dialog'a:
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(setlocal.obj) : error LNK2005: __configthreadlocale уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(setlocal.obj) : error LNK2005: _setlocale уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(tidtable.obj) : error LNK2005: __encode_pointer уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(tidtable.obj) : error LNK2005: __decode_pointer уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __cexit уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __amsg_exit уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __initterm_e уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(winsig.obj) : error LNK2005: _signal уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(strftime.obj) : error LNK2005: _strftime уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(mlock.obj) : error LNK2005: __lock уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(mlock.obj) : error LNK2005: __unlock уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_a уже определен в MSVCRTD.lib(cinitexe.obj) 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_z уже определен в MSVCRTD.lib(cinitexe.obj) 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a уже определен в MSVCRTD.lib(cinitexe.obj) 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_z уже определен в MSVCRTD.lib(cinitexe.obj) 1>LIBCMTD.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(crt0.obj) : error LNK2005: _mainCRTStartup уже определен в MSVCRTD.lib(crtexe.obj) 1>LIBCMTD.lib(errmode.obj) : error LNK2005: ___set_app_type уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(dbgrptw.obj) : error LNK2005: __CrtDbgReportW уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(atox.obj) : error LNK2005: _atoi уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(getenv.obj) : error LNK2005: _getenv уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(strtol.obj) : error LNK2005: _strtoul уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(_file.obj) : error LNK2005: ___iob_func уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LIBCMTD.lib(fflush.obj) : error LNK2005: _fflush уже определен в MSVCRTD.lib(MSVCR90D.dll) 1>LINK : warning LNK4098: библиотека по умолчанию "MSVCRTD" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library 1>LINK : warning LNK4098: библиотека по умолчанию "LIBCMTD" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library 1>FOXD-1.7.lib(FXDCWindow.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GradientFill@24 в функции "public: virtual void __thiscall FX::FXDCWindow::fillVerticalGradient(int,int,int,int,unsigned int,unsigned int)" (?fillVerticalGradient@FXDCWindow@FX@@UAEXHHHHII@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmReleaseContext@8 в функции "public: void __thiscall FX::FXComposeContext::setFont(class FX::FXFont *)" (?setFont@FXComposeContext@FX@@QAEXPAVFXFont@2@@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmSetCompositionFontW@8 в функции "public: void __thiscall FX::FXComposeContext::setFont(class FX::FXFont *)" (?setFont@FXComposeContext@FX@@QAEXPAVFXFont@2@@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmGetContext@4 в функции "public: void __thiscall FX::FXComposeContext::setFont(class FX::FXFont *)" (?setFont@FXComposeContext@FX@@QAEXPAVFXFont@2@@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmSetCompositionWindow@8 в функции "public: void __thiscall FX::FXComposeContext::setSpot(int,int)" (?setSpot@FXComposeContext@FX@@QAEXHH@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmGetCompositionStringW@16 в функции "public: class FX::FXString __thiscall FX::FXComposeContext::translateEvent(struct tagMSG &)" (?translateEvent@FXComposeContext@FX@@QAE?AVFXString@2@AAUtagMSG@@@Z)1>FOXD-1.7.lib(FXSystem.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__gethostname@8 в функции "class FX::FXString __cdecl FX::FXSystem::getHostName(void)" (?getHostName@FXSystem@FX@@YA?AVFXString@2@XZ)
Обнаружил два незамысловатых решения: 1) Проект/Свойства/Свойства конфигурации/Компоновщик/Ввод - Игнорировать указаную библеотеку: MSVCRTD.lib 2) Проект/Свойства/Свойства конфигурации/"С/С++"/Создание кода/Библиотека времени выполнения/(/МТ)
После чего получил:
1>FOXD-1.7.lib(FXDCWindow.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GradientFill@24 в функции "public: virtual void __thiscall FX::FXDCWindow::fillVerticalGradient(int,int,int,int,unsigned int,unsigned int)" (?fillVerticalGradient@FXDCWindow@FX@@UAEXHHHHII@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmReleaseContext@8 в функции "public: void __thiscall FX::FXComposeContext::setFont(class FX::FXFont *)" (?setFont@FXComposeContext@FX@@QAEXPAVFXFont@2@@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmSetCompositionFontW@8 в функции "public: void __thiscall FX::FXComposeContext::setFont(class FX::FXFont *)" (?setFont@FXComposeContext@FX@@QAEXPAVFXFont@2@@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmGetContext@4 в функции "public: void __thiscall FX::FXComposeContext::setFont(class FX::FXFont *)" (?setFont@FXComposeContext@FX@@QAEXPAVFXFont@2@@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmSetCompositionWindow@8 в функции "public: void __thiscall FX::FXComposeContext::setSpot(int,int)" (?setSpot@FXComposeContext@FX@@QAEXHH@Z) 1>FOXD-1.7.lib(FXComposeContext.obj) : error LNK2019: ссылка на неразрешенный внешний символ _ImmGetCompositionStringW@16 в функции "public: class FX::FXString __thiscall FX::FXComposeContext::translateEvent(struct tagMSG &)" (?translateEvent@FXComposeContext@FX@@QAE?AVFXString@2@AAUtagMSG@@@Z) 1>FOXD-1.7.lib(FXSystem.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__gethostname@8 в функции "class FX::FXString __cdecl FX::FXSystem::getHostName(void)" (?getHostName@FXSystem@FX@@YA?AVFXString@2@XZ) 1>G:\fox-1.7.30\fox_dialog\fox_dialog.exe : fatal error LNK1120: 7 неразрешенных внешних элементов
Зашел в проект, поставляемый с библиотекой и подсмотрел, что в "Дополнительных зависимостях" не хватает кое-каких библиотек: comctl32.lib wsock32.lib ws2_32.lib mpr.lib imm32.lib msimg32.lib (FOXD-1.7.lib - следуя уроку, был уже там )
dialog собрался и заработал! Моему счастью не было предела! Но, возможно, я просто проигнорировал какой-то аспект и оно вышло мне боком в будующем - для того и привожу...
После создания class GlobalLuaState и т.д. (до конца урока)
(??0GlobalLuaState@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>GUI_test.obj : error LNK2001: неразрешенный внешний символ "_lua_pcall" 1>GlobalLuaState.obj : error LNK2019: ссылка на неразрешенный внешний символ _luaL_loadfile в функции "public:
(??0GlobalLuaState@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>GUI_test.obj : error LNK2001: неразрешенный внешний символ "_luaL_loadfile" 1>GlobalLuaState.obj : error LNK2019: ссылка на неразрешенный внешний символ _lua_tonumber в функции "public: int
FX::FXTopWindow::close(unsigned char)" (?close@FXTopWindow@FX@@UAEEE@Z)" 1>G:\fox-1.7.30\Lua_GUI(foxtoolkit)_test\GUI_test.exe : fatal error LNK1120: 9 неразрешенных внешних элементов
На этой странице - http://fox-toolkit.2306850.n4.nabble.com/error-LNK2019-td3999500.html - посоветовали добавить: opengl32.lib и glu32.lib и поменять FOXD-1.7.lib в "release" на FOXDLLD-1.7.lib (Вообщето, просто на FOX.lib; но у меня таковой не собиралось - думаю это так FOXDLLD-1.7.lib в старых версиях именовалась ) Но не помогло Коли будут какие идеи - пишите, сам уж точно не осилю
Добавлено (05.02.2012, 20:56) --------------------------------------------- Как оказалось, нужно было всего лишь дописать #include <stdio.h> #include <stdlib.h> #include <string.h>
Жаль, на такую мелочь столько времени угробил Я ж как у автора, машинально скопировал...
Сообщение отредактировал MaJoR_KolZ - Воскресенье, 05 Февраля 2012, 20:58