Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
Модератор
 Аватар для Curry
5171 / 3535 / 536
Регистрация: 01.06.2013
Сообщений: 7,685
Записей в блоге: 9

Установка SDL и её Haskell- обёрток

17.05.2017, 03:35. Показов 5157. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что такое SDL можно посмотреть в вики . Не скрою, что я публикую здесь описание установки SDL т.к. она требуется в сочиняемом мной GUI, который когда ни будь, надеюсь, опубликую.
Но описание установки SDL, я полагаю, следует дать отдельной темой. Может, кого она и без моего GUI заинтересует.

Кликните здесь для просмотра всего текста
Здесь приводится установка на Windows, но windows-специфична часть где описывается установка сишных библиотек. Последующая установка Haskell-обёрток к ним, скорее всего, независима от ОС.

Что нужно установить: саму SDL как библиотеку на С, и к ней два довеска, тоже на С, - SDL2_image что бы можно было загружать картинки в большинстве распространённых графических файлов, и SDL2_ttf что бы можно было пользоваться шрифтами (Да, да. Сама SDL даже не поддерживает вывод текста).

После установки сишных библиотек (в linux они, наверняка встают «как родные») нужно установить к каждой из трёх свою обёртку. С обёртками на Haskell хроническая невезуха. Даже эти обёртки (тоненькие, небольшие), и то уже несовместимы с последней версией SDL. Но, ничего – мы их починим.

И так, я предполагаю, что мы пользуемся Windows и у нас уже установлен stack. Как его устанавливать я недавно рассказывал. Если у кого что то другое -я не виноват. Я не могу настраивать и описывать этот процесс под всё.

Пока не создаём никакие Haskell проекты. Первым делом мы обновляем и доустанавливаем идущий со stack-ом (а может и с ghc) вариант Arch Linux под Windows который называется msys2 . С указанного сайта его ставить не нужно. Он уже стоит в обрезанном виде.
Главное, уже установлен пакетный менеджер ArchLinux-а называющийся pacman. Правда его нет в PATH Windows (и не нужно для наших целей), зато он виден stack-у. Выполняем в консоли.
Windows Batch file
1
stack exec -- pacman -Syu
(некоторые рекомендуют -Syuu). На все вопросы вида [Y/n] соглашаемся. После того как всё скачается и установится нужно закрыть консоль и открыть снова. Можно попробовать повторить команду stack exec -- pacman -Syu. Если скажет что нечего обновлять, то и хорошо.

Теперь устанавливаем четыре пакета – вспомогательный и те самые три сишных библиотеки : SDL2 (SDL второй версии), SDL2_image и SDL2_ttf.
Сделаем это двумя командами (хотя можно четырьмя или одной – приглядевшись к командам можно понять что я имею ввиду)
Для 64-х разрядной Windows нужно установить
Windows Batch file
1
2
stack exec -- pacman -S mingw-w64-x86_64-pkg-config mingw-w64-x86_64-SDL2
stack exec -- pacman -S mingw-w64-x86_64-SDL2_image mingw-w64-x86_64-SDL2_ttf
Для 32-х разрядной
Windows Batch file
1
2
stack exec -- pacman -S mingw-w64-i686-pkg-config mingw-w64-i686-SDL2
stack exec -- pacman -S mingw-w64-i686-SDL2_image mingw-w64-i686-SDL2_ttf
И сишные библиотеки уже установлены. Устанавливаем Haskell – обёртки. Брать со stackage нет смысла. Они обещали выкладывать туда проверенные пакеты, но, как же …
Основную забираем в исходниках с https://github.com/haskell-game/sdl2 . Кто то может скачать git – ом, но я здесь не буду описывать ещё и git. Кто им не пользуется, может просто скачать sdl2-master.zip (справа на страничке есть подходящая кнопочка).

Для определённости, я распаковал этот архив в c:\Users\User\Samples\Haskell и получился каталог проекта c:\Users\User\Samples\Haskell\sdl2-master (git установит в каталог без суффикса -master).
Заходим в каталог и редактируем файл sdl2.cabal. Его синтаксис похож на синтаксис Haskell тем, что уровни вложенности задаются отступами. Где ни будь, между строкой начинающейся на library и строкой начинающейся на executable нужно вставить
Code
1
    cpp-options: -D_SDL_main_h
соблюдая отступы внутренних тегов. Я вставил над « if flag(no-linear)» с таким же отступом.
Дополнительная правка, на случай, если мы хотим откомпилировать примеры идущие с пакетом.
В подкаталоги examples\lazyfoo\ и examples\twinklebear\ нужно положить по файлу Paths_sdl2.hs с таким содержимым:
Haskell
1
2
3
4
module Paths_sdl2 (getDataFileName) where
 
getDataFileName :: String -> IO String
getDataFileName s = return $ "c:/Users/User/Samples/Haskell/sdl2-master/" ++ s
где строка означает путь к пакету. (Может потребоваться коррекция, если пакет распаковали в другой каталог.)
Переходим в консоли в корневой каталог проекта (c:\Users\User\Samples\Haskell\sdl2-master) и выполняем
Windows Batch file
1
stack init
Далее, если хотим откомпилировать примеры, то
Windows Batch file
1
stack build --flag sdl2:examples
(если примеры не нужны, то можно проверить сборку самой библиотеки без флага, т.е. просто stack build).
Примеры можно запускать так
Windows Batch file
1
2
stack exec lazyfoo-lesson-01
stack exec lazyfoo-lesson-02
Список примеров можно посмотреть в sdl2.cabal, в строках начинающихся на executable.
Кстати, примеры переписаны с сишных и можно нагуглить соответствующие статьи с описаниями.

Устанавливаем обёртки для двух оставшихся библиотек скачав их с
https://github.com/carldong/sdl2-ttf и https://github.com/sbidin/sdl2-image.git .
Впрочем, ой! Вторая ссылка не работает. Только что работала и вдруг. Таков он – мир Haskell обёрток! Ну, она или восстановится, или можно будет попробовать один из её клонов. В крайнем случае, архив у меня есть.
И, так, в обеих обёртках, в их .cabal файлы нужно так же добавить
Code
1
    cpp-options: -D_SDL_main_h
Если в архивах нет файлов stack.yaml, то выполнить находясь в корневых каталогах stack init. Если файлы были, то заменить в них resolver: lts- на свежий номер.
И ещё по одному изменению потребуется в stack.yaml. Дело в том, что эти пакеты, очевидно, зависят от основного sdl2, но он не в репозитории stackage, а у нас, в локальной директории.
Ничего страшного, между строками stack.yaml
Code
1
2
packages:
- '.'
Вставим ещё одну, так что получится
Code
1
2
3
packages:
- 'c:\Users\User\Samples\Haskell\sdl2-master'
- '.'
Вот теперь можно и их собрать
Windows Batch file
1
stack build
Примеров для них у меня нет. Ждите как GUI выложу, там они используются в полный рост.
3
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.05.2017, 03:35
Ответы с готовыми решениями:

Установка haskell и wxhaskell
Здравствуйте, дайте пожалуйста инфу, как и в каком порядке устанавливать wxhaskell, юзал поиск по форуму, перекачал кучу всего, не которые...

Установка Haskell Platform для Windows 7
Всем привет! Помогите, пожалуйста. Сегодня утром _Ivana привёл интересное решение в теме...

Установка Darcs и Cabal в Haskell Platform
Очередной глупый вопрос. Я скачал и установил Haskell platform 2011.4.0.0, и в нём, как утверждают разработчики, уже есть Cabal. Для тех,...

25
Модератор
 Аватар для Curry
5171 / 3535 / 536
Регистрация: 01.06.2013
Сообщений: 7,685
Записей в блоге: 9
13.05.2018, 07:22  [ТС]
Студворк — интернет-сервис помощи студентам
Мне пришлось вручную добавить c:\Users\User\AppData\Roaming\local\bin в path.
0
275 / 50 / 2
Регистрация: 10.10.2017
Сообщений: 54
13.05.2018, 20:37
Немного почитал https://github.com/commercialh... k/Setup.hs выяснилось, что есть опция `--skip-msys` (https://github.com/commercialh... issues/377). Пока не пробовал ее (насколько я понял с этой опцией будет использоваться ранее установленный msys2), пока открыл https://github.com/commercialh... ssues/4023 про обновление msys2 в дефолтном stack setup. Вроде надо прописать в stack.yaml

stack-options:
- "--skip-msys"

чтобы эта опция была активна по умолчанию.

Добавлено через 6 часов 41 минуту
Оказывается аналогичный https://github.com/commercialh... ssues/3146 висит уже больше года.

Там кстати написано, как именно обновлять дефолтный msys2, чтобы обновилось, а именно

stack exec -- pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime msys2-runtime-devel
stack exec -- pacman -Syu
stack exec -- pacman -Syuu
1
275 / 50 / 2
Регистрация: 10.10.2017
Сообщений: 54
28.05.2018, 13:08
Ура в новом стеке будет новый msys2 https://github.com/fpco/stacka... 825a359511
1
275 / 50 / 2
Регистрация: 10.10.2017
Сообщений: 54
14.06.2018, 01:31
Закоммитили новый msys2 20180531 в stackage-content, чтобы обновиться надо удалить директорию x86_64-windows куда stack-ом устанавливаются по умолчанию программы командой stack setup, затем собственно сделать stack update и stack setup и вуаля устанавливается новый msys2.
1
Модератор
 Аватар для Curry
5171 / 3535 / 536
Регистрация: 01.06.2013
Сообщений: 7,685
Записей в блоге: 9
17.06.2018, 18:28  [ТС]
Попытаюсь, в очередной раз, описать актуальный, на момент публикации этого сообщения, способ установки stack + сишные библиотеки SDL2, SDL2_image, SDL2_ttf + Haskell-обёрток к ним.

Изменения основываются на советах hardentoo в последних сообщениях этой темы и являются их обобщением и результатом проверки. Надеюсь, актуальные способы установки будут тут публиковаться в дальнейшем (мной или кем то).

Для любой ОС: если у вас стоит haskell platform – сносите её. Вам понадобится stack.

Установка stack-а на linux не представляет проблем. Как и установка сишных библиотек SDL2, SDL2_image, SDL2_ttf. Пользователи linux могут не читать то, что под спойлером.
Установка stack и сишных библиотек на Windows 7 – 10
Если у вас уже установлен stack, стоит посмотреть пути, по которым он установлен. Выполняем stack path и смотрим результат. Например, строку начинающуюся с «extra-include-dirs:»
У меня было
extra-include-dirs: C:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20150512\mingw64\include
Смотрим на msys2- , дальше следует дата его выхода(2015.5.12).
Цель – после переустановки получить каталог msys2-20180531 – актуальный на момент публикации этого сообщения (или новее). Т.е. пути будут вроде
c:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20180531\....
Удаление стека
Удалите каталоги указанные в строках «stack-root:», «ghc-paths:» вывода команды stack path. Однако в «stack-root:» (по умолчанию c:\sr) имеется файл конфигурации config.yaml . Если вы его правили, перед временным удалением стека его лучше сохранить где то.

При удалении msys2-… могут быть предупреждения об опасности удаления системных файлов вроде stderr – удаляйте всё.

Есть ещё каталог указанный в «local-bin:» и «local-bin-path:», по умолчанию C:\Users\User\AppData\Roaming\local\bin (выбирается во время инсталляции стека). В нём находятся исполняемые файлы – сам stack.exe и различные утилиты устанавливаемые из Haskell-пакетов, например, hlint. Я не стал удалять этот каталог. Утилиты можно переустановить потом.

Установка стека
Скачать инсталятор стека можно по ссылке с https://haskell-lang.org/get-started/windows .
Если хочется установить stack в каталог отличный от c:\sr, то можно установить переменную окружения STACK_ROOT со значением желаемого каталога.
(Примечание: hardentoo предпочитает, кроме использования переменной окружения STACK_ROOT, подменить все пути которым пользуется stack, см. Часть 2. Установка stack. Пункты 3-6).
Во время установки ставим галочки Add to user %PATH% и set %STACK_ROOT% to recommended default (если не установили STACK_ROOT ранее сами).
После инсталляции выполняем
Windows Batch file
1
2
stack update 
stack setup
Далее читайте Часть 4. Установка msys2, пункты 3-10 с учётом того, что hardentoo использует нестандартные пути. Если используете пути по умолчанию, то будет
3. В c:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20180531\ запускаем msys2.exe.

8. Каталог c:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20180531\usr\bin\ добавляем в PATH.
9. копируем zlib1.dll из c:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20180531\mingw64\bin в c:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\ghc-8.2.2\mingw\bin.
После переустановки стека лучше удалять подкаталоги .stack-work в ваших проектах. При сборке проекта они создадутся заново.

Установка Haskell-обёрток. К счастью, с момента начала этой темы произошли существенные улучшения. Пакеты со stackage.org sdl2 и sdl2-ttf устанавливаются и под windows, и только sdl2-image пока ещё «кривой» на stackage. Его загрузку под windows придётся или выполнять вручную с https://github.com/e45lee/sdl2-image (и указывать в разделе packages: файла stack.yaml проекта), или прописать в этом же файле раздел «extra-deps:»
extra-deps:
- git: https://github.com/e45lee/sdl2-image
commit: e4117ae11621294af3052762ff08867c62df6064
тогда stack загрузит этот пакет перед сборкой нашего проекта.
Примечание: "commit:" должен быть с отступом, под "git:".
Под linux никакие внешние зависимости прописывать в stack.yaml не нужно.
1
Модератор
 Аватар для Curry
5171 / 3535 / 536
Регистрация: 01.06.2013
Сообщений: 7,685
Записей в блоге: 9
19.07.2020, 15:05  [ТС]
Свежие инструкции по установка SDL2 и её Haskell- обёрток.
Только что проделывал, правда только под Win 10 x64.

В инструкции, по прежнему, используются советы hardentoo.

Общее замечание по использованию консоли.
Консоль запускать из самой винды командой cmd (или с помощью ярлыка), но не из файловых менеджеров вроде totalcommander/freecommander/multicommander - у них остаётся старое окружение (PATH и пр.), так что если хочется через них, то закрывайте их предварительно и открывайте снова. Описываемые далее действия меняют переменные окружения.
cmd запускаем всегда не под админом.
Устанавливаем stack
Скачать инсталятор стека можно по ссылке с https://haskell-lang.org/get-started/windows .
Если хочется установить stack в каталог отличный от c:\sr, то можно установить переменную окружения STACK_ROOT со значением желаемого каталога.

Во время установки ставим галочки Add to user %PATH% и set %STACK_ROOT% to recommended default (если не установили STACK_ROOT ранее сами).
После инсталляции запускаем cmd и выполняем
Windows Batch file
1
2
stack update 
stack setup
закрываем консоль (терминал по пингвиньему ).

Обновляем msys32
msys32 ставиться вместе со стеком, в каталог вроде
C:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20180531
Где User может быть именем вашего юзера (уже существующая ветка), 20180531 дата устанавливаемого msys2
Его лучше обновить выполнив из новой консоли
Windows Batch file
1
stack exec -- pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime msys2-runtime-devel
Закрыть консоль и снова запустить cmd.
Windows Batch file
1
stack exec -- pacman -Syu
Закрыть консоль и снова запустить cmd.
Windows Batch file
1
stack exec -- pacman -Syuu
- нет, я не повторился, три разные команды. Может и не нужно каждый раз закрывать консоль, но у меня были проблемы когда попытался выполнить все три команды в одной.

Закрыть консоль.

Пофиксить инсталляцию компилятора
Скопировать zlib1.dll из
C:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\msys2-20180531\mingw64\bin
(для 32х разрядной win, наверно из ...\mingw32\bin) в
C:\Users\User\AppData\Local\Programs\sta ck\x86_64-windows\ghc-8.8.3\mingw\bin
Где User может быть именем вашего юзера (уже существующая ветка), ghc-8.8.3 - текущая версия компилятора.

Установить git

... ну, вдруг не устанавливали.
Я пользуюсь github-ом и, по этому, https://desktop.github.com/
Можно отдельно https://git-scm.com/download/win
после установки и открытия новой консоли git должен быть уже доступен, проверьте
Windows Batch file
1
git --version

Установить сишные библиотеки SDL2
Для 64-х разрядной Windows
Windows Batch file
1
2
stack exec -- pacman -S mingw-w64-x86_64-pkg-config mingw-w64-x86_64-SDL2
stack exec -- pacman -S mingw-w64-x86_64-SDL2_image mingw-w64-x86_64-SDL2_ttf
Для 32-х разрядной
Windows Batch file
1
2
stack exec -- pacman -S mingw-w64-i686-pkg-config mingw-w64-i686-SDL2
stack exec -- pacman -S mingw-w64-i686-SDL2_image mingw-w64-i686-SDL2_ttf

Что же до haskell-обёрток, то пакеты sdl2 и sdl2-ttf со https://www.stackage.org работают и под win, нужно только указывать их в dependencies проектов, а вот sdl2-image уже много лет не хотят фиксить для винды.
По этому, в файле stack.yaml проекта, в разделе «extra-deps:» прописываем
extra-deps:
- git: https://github.com/haskell-game/sdl2-image
commit: 382395c763b473032721c71921b5c9241142178f
, ну и, конечно, добавляем sdl2-image к зависимостям проекта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2020, 15:05

Правильная установка Haskell. Утилита Stack
На настоящий момент установка и использование Haskell через утилиту stack является безусловно предпочтительным. Некоторые могут возразить...

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
"У нас" ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие "пришедшие" используют...

Установка SDL 2
Из-за некоторых проблем с обработкой клавиатуры решил перейти с GLUT на SDL 2. Вопрос: как на Ubuntu установить этот самый SDL 2? ...

SDL: OpenGL: установка границ объема отсечения glOrtho(.);
Открыл окно SDL, создал контекст OpenGL. Соответственно, что бы что-либо рисовать, нужно определить границы объема отсечения. И не...

Как вывести текст на экран, используя библиотеку SDL TTF для SDL 2?
В официальной доке как-то скомкано написано. При инициализации SDL TTF и при загрузке шрифта ошибок нет. Но текст на экране не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru