Whoa! Hold on. When I ran "csc -deploy Pi-Ch.scm" it created a 77kb exe
Pi-Ch.exe in a newly-created directory, Pi-Ch. When I look at the command
line information, I found this error:

C:\Users\Robert\Desktop\Chicken-IUP-Examples\Pi>csc -deploy Pi-Ch.scm
The system cannot find the file specified.

Error: shell command terminated with non-zero exit status 1: "copy /Y
"c:\chicke
n-iup\lib\libchicken.dll" "Pi-Ch""

I manually copied numbers.so into the Pi-Ch directory and libchicken.dll,
and it ran! Thanks to all.

Next question is what does 'csc -static' do? I don't mind sending
libchicken.dll and numbers.so along with the exe, but why does 'csc
-dynamic -static Pi-Ch.scm' do the same, but the exe is now 1.6mb vs 77kb?
I was hoping the two csc switches would combine numbers.os and
libchicken.dll in the exe, in other words, statically link them. Also, I
guess there is some issue with the copy command in MinGW64-32 bit or paths,
but the format looks correct even in the Error line?

Rob

On 4 October 2015 at 22:23, Robert Herman <[email protected]> wrote:

> Yes, I read the manual. All of the examples seem to be a linux host with
> .so files. Windows uses .dll files.
> When I try to deploy a static build of the exe, it makes an exe, and the
> size makes you think it has bundled any dependencies like numbers (from
> 77kb to 1.6mb), but on MinGW64-32 bit, it hasn't. If you try and run the
> exe on a different Windows box, or through a non-MinGW command line on the
> same Windows box, it complains it cannot find the numbers extension. My
> guess is that it has statically linked and bundled libchicken.dll in the
> exe, but not the numbers extension that is in a '(use numbers)' statement
> in the source file.
> If I simply compile the file in the MinGW command line, the exe works
> perfectly. It knows where to find the numbers library it needs, my guess
> from the CHICKEN install directory. The program works. What I am trying to
> do is make a static exe with the dependencies all in the exe. This way I
> can give it to somebody who is not a programmer and does not have CHICKEN
> installed, to run as is. Later I would like to dynamically compile, so the
> user only needs the libchicken.dll once, but I would like to statically
> link any program-specific libs (like numbers). This way the user only needs
> one copy of libchicken.dll in a directory, and any exe I send them will
> have the oddball dependencies statically linked right in the exe.
> For instance, the same program on a Gambit-C MinGW64-64 bit system is
> compiled: "gsc -exe "file.scm"" The resulting exe (4 mb) runs to whomever I
> send it on their Windows box. It includes all of what it needs, i.e. the
> gambit runtime dll, and any libs (like numbers). I guess they made Gambit-C
> more Windows friendly, but it  alas it does not have the packages CHICKEN
> has. On the other hand, if the packages (eggs) only work  if you have
> MinGW64-32 bit installed with a CHICKEN dev environment, it sort of defeats
> the purpose of being able to create stand alone exe files.
>
> I apologize for the lengthy description, and I am grateful for the help! I
> hope I was clear (need sleep) :)
>
> Rob
>
> On 4 October 2015 at 21:30, Peter Bex <[email protected]> wrote:
>
>> On Sun, Oct 04, 2015 at 08:50:59PM +0800, Robert Herman wrote:
>> > Matt,
>> >
>> > "csc -deploy -static Pi-Ch.scm" creates a deploy directory, and the
>> > resulting executable is 1.6MB vs 77KB, but it still throws the "cannot
>> the
>> > load the extension: numbers".
>> >
>> > I then tried putting libchicken.dll in the deploy directory that was
>> > created, and making numbers.so a numbers.dll file, since Windows does
>> not
>> > use .so files, only .dll.
>>
>> I think this is incorrect; looking at my VM mingw install, and all the
>> eggs
>> (even all the import libraries from CHICKEN core), it uses .so for all the
>> dynamically loaded extensions.  And if I install it normally, and type
>> (use numbers) at the REPL, it prints that it's loaded /path/to/numbers.so
>>
>> Renaming manually is something I would definitely not recommend, because
>> then you would be messing with the names that CHICKEN expects.
>>
>> > I used chicken-install -r to retrieve the numbers
>> > egg into the current directory. I then tried "csc -dll numbers.scm" and
>> it
>> > created numbers.so. I tried putting it in the deploy directory, but no
>> > luck. I changed the .so to .dll, and again no luck.
>>
>> I've tried to do it "by the book" on mingw (msys):
>>
>> $ /path/to/chicken-install.exe numbers
>> $ echo '(use numbers) (print 1/2)' > foo.scm
>> $ /path/to/csc.exe -deploy -X numbers-syntax foo.scm
>> $ /path/to/chicken-install.exe -deploy -prefix foo numbers
>> $ # To prove that it's not loading numbers from install dir:
>> $ /path/to/chicken-uninstall.exe numbers
>> $ ./foo/foo.exe
>> 1/2
>>
>> This works perfectly.  The book, incidentally, is here:
>> http://wiki.call-cc.org/man/4/Deployment
>>
>> Hope this helps,
>> Peter
>>
>
>
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to