Как построить программу, чтобы она не требовала DLL - PullRequest
6 голосов
/ 05 декабря 2010

Как я могу скомпилировать (Haskell) программу, чтобы она не требовала DLL?

Я написал программу, которая использует GLUT и требует glut32.dll. Я скомпилировал это с ghc --make program.hs. Теперь я хочу распространять свою программу, но не хочу, чтобы она требовала каких-либо библиотек DLL (поэтому я могу просто предоставить .exe пользователям). Я попытался скомпилировать с ghc -static --make program.hs, но это не сработало, я все еще получаю сообщение «Ошибка пользователя (неизвестная запись GLUT glutInit)».

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2010

Это возможно только в том случае, если GLUT предоставляет статическую версию библиотеки (ее можно назвать как-то вроде glut32s.lib, но не требуется, чтобы они называли это как-то конкретно).

Успех этого подходатакже будет зависеть от того, позволяет ли GHC вообще связываться с внешними статическими библиотеками.Страница man для ghc указывает, что -static применяется только к библиотекам Haskell, но не к другим внешним библиотекам.

2 голосов
/ 12 мая 2011

Предполагая, что у вас есть статические версии необходимых библиотек C, вы можете создать статический исполняемый файл Haskell с помощью:

 ghc -O2 --make -static -optc-static -optl-static A.hs -fvia-C

, который гарантирует, что компоненты Haskell и компоненты C будут статически связаны через набор инструментов C.

...