From: John O'D. <jt...@dc...> - 2009-09-28 13:29:02
|
Hi, I have a Haskell program that uses gtk2hs, and would like to make a standalone Windows executable from it (running ghc-6.10.3 and gtk2hs-0.10.1). The program compiles ok with the -static ghc linker option, and the program runs fine on a Windows machine that has ghc and gtk2hs installed, but then when the executable is carried over to another Windows machine that doesn't have gtk2hs installed locally, it fails to launch. A dialogue box says it can't find a DLL for lib-cairo; when the dependency on cairo was removed it then complains it can't find DLL for lib-glade, and so on. Is there a way to produce a Windows executable for an application so you can run it on a machine even if gtk2hs isn't installed? Thanks, John O'Donnell ________________________________ The University of Glasgow, charity number SC004401 |
From: Bulat Z. <bul...@gm...> - 2009-09-28 14:03:24
|
Hello John, Monday, September 28, 2009, 5:28:48 PM, you wrote: > Is there a way to produce a Windows executable for an application > so you can run it on a machine even if gtk2hs isn▓t installed? it's gtk2 what needs to be installed, you may add to ypur program distribution files from this installation: http://downloads.sourceforge.net/sourceforge/gtk-win/gtk2-runtime-2.16.4-2009-07-08-ash.exe?use_mirror=sunet note that your program should be placed in bin directory in order to be able to find gtk2 libs -- Best regards, Bulat mailto:Bul...@gm... |
From: Axel S. <Axe...@en...> - 2009-09-28 14:22:22
|
On Mon, 2009-09-28 at 14:28 +0100, John O'Donnell wrote: > Hi, > > > > I have a Haskell program that uses gtk2hs, and would like to make a > standalone Windows executable from it (running ghc-6.10.3 and > gtk2hs-0.10.1). The program compiles ok with the –static ghc linker > option, and the program runs fine on a Windows machine that has ghc > and gtk2hs installed, but then when the executable is carried over to > another Windows machine that doesn’t have gtk2hs installed locally, it > fails to launch. A dialogue box says it can’t find a DLL for > lib-cairo; when the dependency on cairo was removed it then complains > it can’t find DLL for lib-glade, and so on. > > > > Is there a way to produce a Windows executable for an application so > you can run it on a machine even if gtk2hs isn’t installed? I assume you don't even use the glade package? I don't quite know why the final executable has dependencies on packages that are not used. Windows will look for DLLs in the current directory and then on the $PATH. Thus, if you want to ship your application stand-alone, it will be easiest to copy your executable into a directory and with it all DLLs that are needed. Cheers, Axel. |
From: Duncan C. <dun...@go...> - 2009-09-28 17:05:20
|
On Mon, 2009-09-28 at 14:28 +0100, John O'Donnell wrote: > Hi, > > > > I have a Haskell program that uses gtk2hs, and would like to make a > standalone Windows executable from it (running ghc-6.10.3 and > gtk2hs-0.10.1). The program compiles ok with the –static ghc linker > option, and the program runs fine on a Windows machine that has ghc > and gtk2hs installed, but then when the executable is carried over to > another Windows machine that doesn’t have gtk2hs installed locally, it > fails to launch. A dialogue box says it can’t find a DLL for > lib-cairo; when the dependency on cairo was removed it then complains > it can’t find DLL for lib-glade, and so on. > Is there a way to produce a Windows executable for an application so > you can run it on a machine even if gtk2hs isn’t installed? As Axel and Bulat say, it's just a matter of including the dlls and other files that Gtk+ needs. Do not attempt to statically link those Gtk dlls with your .exe to make a single movable .exe. That's not how it works, Gtk+ expects to be able to dynamically load some dlls like themes and bitmap decoders and in any case Gtk+ needs a few other data files. I've shipped standalone Gtk2Hs apps to customers running windows and it works fine. There's no installation required (though you can of course make an installer if you like that kind of thing). As an example see: http://haskell.org/~duncan/gtk2hs/LSystemSetup.exe It works without ghc or gtk being installed. Duncan |
From: John O'D. <jt...@dc...> - 2009-09-30 14:51:28
|
Hi, Background: I'm trying to make a standalone Windows executable, so it will run on a Windows machine that doesn't have a lot of Haskell packages already installed. The program uses gtk2hs. My initial attempts led to a program that, when launched, gets a dialog box saying some DLLs are missing. Several people (thank you!) gave the same advice: copy the DLLs that are needed into the folder that contains an executable, and then, when it launches, Windows will look first for the DLLs in that folder. This is indeed what is supposed to happen, according to what little documentation I've been able to find, but it doesn't work. According to my experiments, it's not enough for a DLL to be located physically in the same folder as the application that needs it. If you put it there, the application just silently hangs and then dies (without the DLL in the folder, a dialog box appears saying the DLL is missing). Apparently, the DLL needs to be in the same place in the file system that it was when the application was compiled. Is that correct? I hope not! An alternative approach would be a static build, instead of dynamic linking. I've tried compiling the program with ghc specifying the -static flag, but it still doesn't produce a static compilation. Was gtk2hs was built for Windows without -static? I'm using the binary Windows installation of gtk2hs from its web page. Any suggestions would be very welcome! Does there exist a static build of gtk2hs for Windows? Is it possible to compile a Windows program on one machine and execute it on another? Thanks, John O'Donnell -----Original Message----- From: Axel Simon [mailto:Axe...@en...] Sent: 28 September 2009 14:39 To: John O'Donnell Cc: gtk...@li... Subject: Re: [Gtk2hs-users] Making a static Windows executable with gtk2hs On Mon, 2009-09-28 at 14:28 +0100, John O'Donnell wrote: > Hi, > > > > I have a Haskell program that uses gtk2hs, and would like to make a > standalone Windows executable from it (running ghc-6.10.3 and > gtk2hs-0.10.1). The program compiles ok with the –static ghc linker > option, and the program runs fine on a Windows machine that has ghc > and gtk2hs installed, but then when the executable is carried over to > another Windows machine that doesn’t have gtk2hs installed locally, it > fails to launch. A dialogue box says it can’t find a DLL for > lib-cairo; when the dependency on cairo was removed it then complains > it can’t find DLL for lib-glade, and so on. > > > > Is there a way to produce a Windows executable for an application so > you can run it on a machine even if gtk2hs isn’t installed? I assume you don't even use the glade package? I don't quite know why the final executable has dependencies on packages that are not used. Windows will look for DLLs in the current directory and then on the $PATH. Thus, if you want to ship your application stand-alone, it will be easiest to copy your executable into a directory and with it all DLLs that are needed. Cheers, Axel. The University of Glasgow, charity number SC004401 |
From: Bulat Z. <bul...@gm...> - 2009-09-30 15:40:46
|
Hello John, Wednesday, September 30, 2009, 6:51:07 PM, you wrote: no. you need not only dll files but some other small files too. i've already suggested you to install gtk and then add this entire directory to your application. you may look at http://freearc.org/download/0.51/FreeArc-portable-0.51-win32.zip > Hi, > Background: I'm trying to make a standalone Windows executable, so > it will run on a Windows machine that doesn't have a lot of Haskell > packages already installed. The program uses gtk2hs. My initial > attempts led to a program that, when launched, gets a dialog box saying some DLLs are missing. > Several people (thank you!) gave the same advice: copy the DLLs > that are needed into the folder that contains an executable, and > then, when it launches, Windows will look first for the DLLs in that folder. > This is indeed what is supposed to happen, according to what little > documentation I've been able to find, but it doesn't work. > According to my experiments, it's not enough for a DLL to be located > physically in the same folder as the application that needs it. If > you put it there, the application just silently hangs and then dies > (without the DLL in the folder, a dialog box appears saying the DLL > is missing). Apparently, the DLL needs to be in the same place in > the file system that it was when the application was compiled. Is that correct? I hope not! > An alternative approach would be a static build, instead of dynamic > linking. I've tried compiling the program with ghc specifying the > -static flag, but it still doesn't produce a static compilation. > Was gtk2hs was built for Windows without -static? I'm using the > binary Windows installation of gtk2hs from its web page. > Any suggestions would be very welcome! Does there exist a static > build of gtk2hs for Windows? Is it possible to compile a Windows > program on one machine and execute it on another? > Thanks, > John O'Donnell > -----Original Message----- > From: Axel Simon [mailto:Axe...@en...] > Sent: 28 September 2009 14:39 > To: John O'Donnell > Cc: gtk...@li... > Subject: Re: [Gtk2hs-users] Making a static Windows executable with gtk2hs > On Mon, 2009-09-28 at 14:28 +0100, John O'Donnell wrote: >> Hi, >> >> >> >> I have a Haskell program that uses gtk2hs, and would like to make a >> standalone Windows executable from it (running ghc-6.10.3 and >> gtk2hs-0.10.1). The program compiles ok with the –static ghc linker >> option, and the program runs fine on a Windows machine that has ghc >> and gtk2hs installed, but then when the executable is carried over to >> another Windows machine that doesn’t have gtk2hs installed locally, it >> fails to launch. A dialogue box says it can’t find a DLL for >> lib-cairo; when the dependency on cairo was removed it then complains >> it can’t find DLL for lib-glade, and so on. >> >> >> >> Is there a way to produce a Windows executable for an application so >> you can run it on a machine even if gtk2hs isn’t installed? > I assume you don't even use the glade package? I don't quite know why > the final executable has dependencies on packages that are not used. > Windows will look for DLLs in the current directory and then on > the $PATH. Thus, if you want to ship your application stand-alone, it will be easiest to > copy your executable into a directory and with it all DLLs that are > needed. > Cheers, > Axel. > The University of Glasgow, charity number SC004401 > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Gtk2hs-users mailing list > Gtk...@li... > https://lists.sourceforge.net/lists/listinfo/gtk2hs-users -- Best regards, Bulat mailto:Bul...@gm... |
From: John O'D. <jt...@dc...> - 2009-09-30 16:26:30
|
Hello Bulat, and anyone else interested, Your advice fixed my problem! My error was that I had copied only the DLLs into the application directory. However, when I did what Bulat said, and copied the entire contents of the installation folder for gtk2hs into the application's directory, then it works. And it works when the entire folder is copied onto another machine, that doesn't have everything installed. Thanks again, Bulat! Best wishes, John -----Original Message----- From: Bulat Ziganshin [mailto:bul...@gm...] Sent: 30 September 2009 16:40 To: John O'Donnell Cc: Axel Simon; gtk...@li... Subject: Re[2]: [Gtk2hs-users] Making a static Windows executable with gtk2hs Hello John, Wednesday, September 30, 2009, 6:51:07 PM, you wrote: no. you need not only dll files but some other small files too. i've already suggested you to install gtk and then add this entire directory to your application. you may look at http://freearc.org/download/0.51/FreeArc-portable-0.51-win32.zip > Hi, > Background: I'm trying to make a standalone Windows executable, so > it will run on a Windows machine that doesn't have a lot of Haskell > packages already installed. The program uses gtk2hs. My initial > attempts led to a program that, when launched, gets a dialog box saying some DLLs are missing. > Several people (thank you!) gave the same advice: copy the DLLs > that are needed into the folder that contains an executable, and > then, when it launches, Windows will look first for the DLLs in that folder. > This is indeed what is supposed to happen, according to what little > documentation I've been able to find, but it doesn't work. > According to my experiments, it's not enough for a DLL to be located > physically in the same folder as the application that needs it. If > you put it there, the application just silently hangs and then dies > (without the DLL in the folder, a dialog box appears saying the DLL > is missing). Apparently, the DLL needs to be in the same place in > the file system that it was when the application was compiled. Is that correct? I hope not! > An alternative approach would be a static build, instead of dynamic > linking. I've tried compiling the program with ghc specifying the > -static flag, but it still doesn't produce a static compilation. > Was gtk2hs was built for Windows without -static? I'm using the > binary Windows installation of gtk2hs from its web page. > Any suggestions would be very welcome! Does there exist a static > build of gtk2hs for Windows? Is it possible to compile a Windows > program on one machine and execute it on another? > Thanks, > John O'Donnell > -----Original Message----- > From: Axel Simon [mailto:Axe...@en...] > Sent: 28 September 2009 14:39 > To: John O'Donnell > Cc: gtk...@li... > Subject: Re: [Gtk2hs-users] Making a static Windows executable with gtk2hs > On Mon, 2009-09-28 at 14:28 +0100, John O'Donnell wrote: >> Hi, >> >> >> >> I have a Haskell program that uses gtk2hs, and would like to make a >> standalone Windows executable from it (running ghc-6.10.3 and >> gtk2hs-0.10.1). The program compiles ok with the –static ghc linker >> option, and the program runs fine on a Windows machine that has ghc >> and gtk2hs installed, but then when the executable is carried over to >> another Windows machine that doesn’t have gtk2hs installed locally, it >> fails to launch. A dialogue box says it can’t find a DLL for >> lib-cairo; when the dependency on cairo was removed it then complains >> it can’t find DLL for lib-glade, and so on. >> >> >> >> Is there a way to produce a Windows executable for an application so >> you can run it on a machine even if gtk2hs isn’t installed? > I assume you don't even use the glade package? I don't quite know why > the final executable has dependencies on packages that are not used. > Windows will look for DLLs in the current directory and then on > the $PATH. Thus, if you want to ship your application stand-alone, it will be easiest to > copy your executable into a directory and with it all DLLs that are > needed. > Cheers, > Axel. > The University of Glasgow, charity number SC004401 > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Gtk2hs-users mailing list > Gtk...@li... > https://lists.sourceforge.net/lists/listinfo/gtk2hs-users -- Best regards, Bulat mailto:Bul...@gm... The University of Glasgow, charity number SC004401 |
From: Duncan C. <dun...@go...> - 2009-10-03 14:20:15
|
On Wed, 2009-09-30 at 17:26 +0100, John O'Donnell wrote: > Hello Bulat, and anyone else interested, > > Your advice fixed my problem! My error was that I had copied only the > DLLs into the application directory. However, when I did what Bulat > said, and copied the entire contents of the installation folder for > gtk2hs into the application's directory, then it works. And it works > when the entire folder is copied onto another machine, that doesn't > have everything installed. That's actually significantly more than you need, because it includes all the gtk2hs library files etc. For some reason it's missing for the 0.10.1 release, but the 0.10.0 release came with the gtk2hs-0.10.0-clibs-win32.zip which is all the gtk runtime dlls. Duncan |
From: Bulat Z. <bul...@gm...> - 2009-10-03 14:36:08
|
Hello Duncan, Saturday, October 3, 2009, 4:56:35 PM, you wrote: > That's actually significantly more than you need, because it includes > all the gtk2hs library files etc. i suggested to use gtk+ files > For some reason it's missing for the 0.10.1 release, but the 0.10.0 > release came with the gtk2hs-0.10.0-clibs-win32.zip which is all the gtk > runtime dlls. actually, gtk2hs-clibs is 22 mb unpacked, while gtk2-runtime-2.16.5 is just 12 mb. OTOH the later lacks lots of dlls: libgdkglext-win32-1.0-0.dll libgtksourceview-2.0-0.dll libORBit-2-0.dll to name a few largest ones i think that gtk2hs-0.10.0-clibs-win32.zip may be used for latest gtk2hs versions too since it's haskell-independent -- Best regards, Bulat mailto:Bul...@gm... |