FLTK2

Тема в разделе "LANGS.C", создана пользователем bug1z, 9 июл 2011.

  1. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Доброе утро.

    Работал с FLTK 1.9. Собрал следующим образом:
    Скомпилировал саму библиотеку, либы и хэдеры закинул в папочки студии. В настройках проекта прописал:
    и в Ignore: libc.lib;MSVCRT.lib

    Собственно все работало. Сегодня решил перейти на вторую. Скомпилировал ее и сделал все в точности так же(за исключением названий библиотек).
    Код (Text):
    1. comctl32.lib
    2. fltk2.lib
    3. fltk2_gl.lib
    4. fltk2_images.lib
    5. fltk2_jpeg.lib
    6. fltk2_png.lib
    7. fltk2_glut.lib
    8. fltk2_z.lib
    9. MSVCRTd.lib
    10. ws2_32.lib
    Но нивкакую не хочет линковаться, выдает:

    Код (Text):
    1. 1>------ Build started: Project: fltk, Configuration: Release Win32 ------
    2. 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRTd.lib(MSVCR100D.dll)
    3. 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRTd.lib(MSVCR100D.dll)
    4. 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRTd.lib(MSVCR100D.dll)
    5. 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRTd.lib(MSVCR100D.dll)
    6. 1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRTd.lib(MSVCR100D.dll)
    7. 1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in MSVCRTd.lib(MSVCR100D.dll)
    8. 1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRTd.lib(MSVCR100D.dll)
    9. 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRTd.lib(cinitexe.obj)
    10. 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTd.lib(cinitexe.obj)
    11. 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTd.lib(cinitexe.obj)
    12. 1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTd.lib(cinitexe.obj)
    13. 1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTd.lib(MSVCR100D.dll)
    14. 1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTd.lib(MSVCR100D.dll)
    15. 1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTd.lib(MSVCR100D.dll)
    16. 1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in MSVCRTd.lib(MSVCR100D.dll)
    17. 1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
    18. 1>C:\Users\bug1z\documents\visual studio 2010\Projects\fltk\Release\fltk.exe : fatal error LNK1169: one or more multiply defined symbols found
    Как быть?
    Может у кого получится подружить с ней 10ю студит.
    Вот сама библиотека:
    http://www.fltk.org/software.php?VERSION=1.3.0&FILE=fltk/snapshots/fltk-2.0.x-alpha-r8800.tar.bz2

    и код для теста:
    Код (Text):
    1. #include <fltk/Window.h>
    2. #include <fltk/Widget.h>
    3. #include <fltk/run.h>
    4. using namespace fltk;
    5.  
    6. int main(int argc, char **argv) {
    7.     Window *window = new Window(300, 180);
    8.     window->begin();
    9.     Widget *box = new Widget(20, 40, 260, 100, "Hello, World!");
    10.     box->box(UP_BOX);
    11.     box->labelfont(HELVETICA_BOLD_ITALIC);
    12.     box->labelsize(36);
    13.     box->labeltype(SHADOW_LABEL);
    14.     window->end();
    15.     window->show(argc, argv);
    16.     return run();
    17. }
    Спасибо.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Собралось, никаких настроек не менял.
     
  3. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    А можно увидеть ход действий? :)
    А то заметил, что сама FLTK скомпилилась с эррорами, хотя библиотеки появились в папке.
    Пробовал уже и 8й студией собрать его и интеловским компилятором - все равно ругается. может из за этого либа вышла не работающей?

    Вроде все по инструкции делал: подгрузил проект в студию(из папки vcnet) - она попросила что то переконвертировать. Дал добро. Затем выбрал Relase.

    Если брать из папки visualc - то еще что то говорит о контроле версий.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Линкуете статически?
     
  5. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Собрал с опцией /MT - помогло.
    Хотя Страуструп в книге писал, что нужно /MDd

    А с самим солюшином флтк проблема была весьма странная. Студия создавала в папке релиз файлы с расширением tlog. И в ошибке говорилось, что студия не может получить доступ к этому файлу, так как он используется другим проектом. Пришлось компилировать по 1 проекту и чистить эти файлы вручную. Хотя demo так и не скомпилировался.

    Большое спасибо за помощь!
     
  6. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Хотя нет. проблема решилась только частично. Работает только в Debug :dntknw:

    Теперь говорит вот что:

    Код (Text):
    1. 1>fd.obj : error LNK2001: unresolved external symbol "int __cdecl fltk::run(void)" (?run@fltk@@YAHXZ)
    2. 1>fd.obj : error LNK2001: unresolved external symbol "class fltk::Symbol * fltk::UP_BOX" (?UP_BOX@fltk@@3QAVSymbol@1@A)
    3. 1>fd.obj : error LNK2001: unresolved external symbol "struct fltk::Font * fltk::HELVETICA_BOLD_ITALIC" (?HELVETICA_BOLD_ITALIC@fltk@@3QAUFont@1@A)
    4. 1>fd.obj : error LNK2001: unresolved external symbol "public: void __thiscall fltk::Window::show(int,char * *)" (?show@Window@fltk@@QAEXHPAPAD@Z)
    5. 1>fd.obj : error LNK2001: unresolved external symbol "public: __thiscall fltk::Window::Window(int,int,char const *)" (??0Window@fltk@@QAE@HHPBD@Z)
    6. 1>fd.obj : error LNK2001: unresolved external symbol "class fltk::LabelType * fltk::SHADOW_LABEL" (?SHADOW_LABEL@fltk@@3QAVLabelType@1@A)
    7. 1>fd.obj : error LNK2001: unresolved external symbol "public: void __thiscall fltk::Widget::labelsize(float)" (?labelsize@Widget@fltk@@QAEXM@Z)
    8. 1>fd.obj : error LNK2001: unresolved external symbol "public: void __thiscall fltk::Widget::labeltype(class fltk::LabelType *)" (?labeltype@Widget@fltk@@QAEXPAVLabelType@2@@Z)
    9. 1>fd.obj : error LNK2001: unresolved external symbol "public: void __thiscall fltk::Widget::labelfont(struct fltk::Font *)" (?labelfont@Widget@fltk@@QAEXPAUFont@2@@Z)
    10. 1>fd.obj : error LNK2001: unresolved external symbol "public: void __thiscall fltk::Widget::box(class fltk::Symbol *)" (?box@Widget@fltk@@QAEXPAVSymbol@2@@Z)
    11. 1>fd.obj : error LNK2001: unresolved external symbol "public: __thiscall fltk::Widget::Widget(int,int,int,int,char const *)" (??0Widget@fltk@@QAE@HHHHPBD@Z)
    12. 1>fd.obj : error LNK2001: unresolved external symbol "private: static class fltk::Group * fltk::Group::current_" (?current_@Group@fltk@@0PAV12@A)
    13. 1>LIBCMT.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Страуструп писал? Поставьте MT и в Release. Вообще какой тип рантайма используется в программе, такой же должен быть и у статической библиотеки. При использовании динамической библиотеки это не важно.
     
  8. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Да, в своей новой книге Принципы и практика использования С++. Но он, видимо, подразумевал, что библиотека тоже будет собрана как /MDd

    В релизе выставлено тоже /MT

    Может опять налажал где то при компиляции библиотеки.. Сей час перекрмпилирую - отпишу.
     
  9. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Перекомпилировал с ключом /MDd. По прежнему в дебаге нормально, а в релмзе - ошибки из поста №6
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Скорее всего не указана fltk2.lib в настройках линковки для релиза.

    З.Ы. У меня всё гуд и в дебаге и в релизе.
     
  11. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Да, Вы правы. В релизе не были указаны библиотеки. Спасибо огромное!

    И если можно, последний вопрос? :)
    В версии 1.9 аналогичный представленному в первом посте код выдавал окошко с приветствием, но сей час помимо этого окошка еще и консольное есть. Можно ли от него как то избавиться?
     
  12. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Убрать /subsystem:console
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    И поставить /subsystem:windows
     
  14. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Там выставлено /SUBSUSTEM:WINDOWS
     
  15. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В релизе? Не может такого быть.
     
  16. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    И в релизе и в дебаге. Вкладка "Компоновщик" пункт "Система". Там в колонке Подсистема написано Windows(/SUBSUSTEM:WINDOWS)
    Я создавал Win32 приложение, а не консольное.
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Тогда не знаю, этого не должно быть. По крайней мере у меня опять же никакого консольного окна не появляется. Дополнительно ничего не крутили в проектах? Можно посмотреть SUBSUSTEM непосредственно в PE заголовке файла.
     
  18. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Посмотрел в PEIDe - сабсистем Win32 GUI.
    А проявилось это весьма странно. После действий описанных в посте #5 все заработало и накаких консольных окон не было. Я скопировал все либ файлы и перенес с ПК на ноут(тоже 10я студия). Все настроил и там появилось это консольное окошко. Затем перекомпилировал библиотеку с ключом /MDd и это окно появилось и на ПК.
     
  19. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Вот что нагуглил:

    Но я собирал библиотеку не как Debug, а как Relase.