Использование библиотеки графики в Visual Studio

Тема в разделе "WASM.BEGINNERS", создана пользователем sivsoft, 16 апр 2009.

  1. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Доброго времени суток!
    Необходимо сделать прогу для обработки (например, удаление мусора после сканирования) графических файлов и последующей конвертацией, например, jpg, bmp в tiff с сжатием CCITTFAX4.
    Пробовал использовать библиотеку freeimage, но есть проблемы. Хочется чтобы прога, которая использует вызовы API запускалась и на чистой XP без установки разных левых MFC библиотек и redistributable пакетов.
    Добавил строчки:

    #pragma comment(linker, "/MERGE:.rdata=.text")
    #pragma comment(linker,"/NODEFAULTLIB")
    #pragma comment(linker,"/ENTRY:WMain")
    #pragma comment(linker,"/SUBSYSTEM:WINDOWS")

    плюс Buffer Security Check отключаю в настройках проекта.
    Если компилировать без использования freeimage, то все классно получается файлик размером 2,6Кб везде стартует, как только добавляешь freeimage:

    #pragma comment(lib, "dll\\Release\\FreeImage.lib")

    #include "FreeImage.h"

    начинаются обшибки:
    Error 13 error LNK2001: unresolved external symbol __imp__FreeImage_GetHeight@4
    и подобные

    Вопрос в следующем:
    Как можно сделать чтобы линковалось?
    Есть ли другие либы?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    CRT то зачем отключать? Да и бред всё это, положи в каталог программы что надо и всё.
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Booster
    Меня попросили, без требованию к библиотекам написать, а прилинковать статически не могу. Мс вообще хренью какойто страдает
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SPA
    А при чём здесь требования к библиотекам? Чтобы и в каталоге программы не было? Это очень странно. FreeImage - опенсорс, собрать статическую.

    В смысле?
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Попробуй дефолтное соглашение вызова поменять с '__fastcall' на что-нибудь другое.
     
  6. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Sol_Ksacap
    и __fastcall и stcall попробовал - тоже самое. Может скомпиллировать dll самому? Я ее вообще с сайта скачал. Или может там надо еще что ложить? Например, если не dll сипользовать то там еще надо ложить и либы libTIFF, libJPEG и т.д.
    Booster
    в каталог программы это одно, хотя ложу dll, которую не использую msvcr90.dll, хотя это странно для 2Кб кода ложить еще 700Кб библиотеки. Так еще она работать не будет просто так - прописывай манифесты и ставь Visual Studio Redistributable Package. А вот это уже совсем идиотизм. Типа как врачи бывают выписывают лекарства: прими вот эту таблетку, она конечно не нужна но прими, ну и чтобы устранить ее негативное воздействие вот еще список лекарств :)
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    А статический crt, а встроить манифест в приложение? Точно правильно путь к FreeImage.lib прописан?
     
  8. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    в голой ХП ругается приложение неправильно настроено переустановка поможет

    путь верен
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    Манифест требует зависимостей. Открой его и посмотри что там. Ну или не встроил манифест.
     
  10. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Все равно манифест длл - это дурацкий путь нет ли другого решения?
    Вот он:
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    Манифест сделал встроенным?
     
  12. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    а как?
     
  13. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Хех, ^это нас перекосило, не обращай внимания.

    Лучше покажи, что выведет
    Код (Text):
    1. dumpbin.exe /exports FreeImage.lib
     

    Слинкуй статически (ключ '/MT') и убери манифест. Убедись, что в конечный файл он точно не добавился (даже при статической компоновке данные о зависимости от msvcrt90.dll могут добавить #pragma-директивы из crt-заголовков).
    Не обязательно убирать весь ман — главное убрать часть, которая говорит о зависимости от msvcrt90.dll.
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Если отключаешь CRT то #pragma comment(lib, действительно глючит - проблема решается указанием FreeImage.lib в Свойства проекта -> компоновщик -> ввод -> дополнительные зависимости.
     
  15. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    а как - он не линкуется.
    Обнаружил проблему линковки:
    #pragma comment(linker,"/NODEFAULTLIB")
    это она :)
    если ставить:
    //#pragma comment(linker, "/nodefaultlib:LIBCMT.lib")
    //#pragma comment(linker, "/nodefaultlib:LIBC.lib")
    то все ок - правда он гад все равно использует в этом случае msvcr90.dll
    манифест не проблема убрать. Что имеется в виду слинковать статически? :dntknw:
     
  16. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Y_Mur
    попробовал - действительно что-то меняется - хотя не пойму почему нельзя через pragma - ну то ладно... Тем не менее вывалилось куча ошибок теперь по либам вида:
    Error 13 error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) OpenEXR.lib IBPPTest
    где-то я уже это видел
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    В 2005 студии Manifest Tool/Input and Output/Embeded Manifest.

    Приехали. Верни рантайм на родину.
     
  18. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Embeded Manifest стоит Yes
     
  19. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    в итоге выдает тоже самое в голой XP:
    "Приложение не было запущено, поскольку оно некорректно настроено"...
     
  20. juicy_emad

    juicy_emad New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2008
    Сообщения:
    82