Cmdr Colstel has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to create a standalone Windows executable with a Perl script which has successfully run using PerlApp when using the run library obtained from my PC. It will not, however, work when I do not use the run library. It gets hung up because it is looking for Unix.dll, "warn: auto\File\Spec\Unix\Unix.dll not found". I do not have that folder. How can I create it or should I download it ? I'm trying to run the program on Windows so I don't know why it needs to refer to Unix.dll anyway ? I am using ActiveState Perl 5.20 with PerlApp 9.4. Thanks.

File\Spec\ warn: auto\File\Spec\Unix\Unix.dll not found refby: perlapp --add refby: line 6 refby: L:\Perl64\site\lib\File\Spec\ line 40 refby: L:\Perl64\site\lib\File\Spec\ line 6 file: L:\Perl64\site\lib\File\Spec\

Replies are listed 'Best First'.
Re: Unix.dll not Found in PerlApp
by ww (Archbishop) on Sep 14, 2015 at 19:06 UTC

    Don't use PerlApp; therefore, don't know if this is relevant, but since your messages include a reference to the --add command

    warn: auto\File\Spec\Unix\Unix.dll not found
    refby: perlapp --add
    from the AS doc re PerlApp9.3 here's some possibly relevant information:

    --add modules
        List additional modules to include in the application. PerlApp also attempts to include 
        modules that the listed modules depend on. Multiple modules can be separated by whitespace 
        or a semicolon. This option can be repeated. For example: 
            perlapp --add IO::Socket --add XML::Parser::Expat
        ...would include IO::Socket and XML::Parser in your application.
        The --add option supports the following wildcard notations: --add Module::* includes Module::Foo, 
        but neither Module itself nor Module::Foo::Bar. --add Module::** includes Module::Foo and 
        Module::Foo::Bar, but not Module. --add Module:: works the same as --add Module;Module::**, 
        including all of Module, Module::Foo and Module::Foo::Bar. Note that you may have to quote 
        the * character to prevent wildcard expansion by your command shell.
        PerlApp uses built-in heuristics to determine any additional modules that may be required at 
        runtime. When building an executable, missing modules are displayed as errors. In a few cases, 
        however, the heuristics are used to downgrade errors to warnings. PerlApp issues warnings 
        for the following:
          + Windows executables built without Unix, Mac, VMS and OS/2 modules 

    A bit more information about your script and source might win you better help from those more knowledgable of PerlApp than I.

    ++$anecdote ne $data

      Hi, thanks for your reply.

      When I get the warning it looks like it is looking for Unix.dll in the auto folder. If I am not mistaken, that's something generated by PerlApp's (XSLoader ?) during runtime. I have the from my Perl installation and somehow, it probably uses the to generate a Unix.dll. All other dlls have been created by PerlApp except this one. Do I have to make it (Unix.dll) ? It is probably failing in creating it automatically and that is why I cannot find it. My question is therefore how do I make it or where do I download it? These were my settings for PerlApp:

      perlapp --trim Mac::Glue::; extractors::; auto::SetDualVar::; Locale::Maketext::Lexicon::; Test::Manifest::; VMS::DCLsym::; Win32::TieRegistry::; Data::Lazy::; SetDualVar::; Win32::FileOp::; Win32::Locale::; Log::Contextual::WarnLogger::; Encode::HanExtra::; I18N::Langinfo::; Ext::MM_Unix::; File::Spec::;version::; auto::ExtUtils::Unix::; ExtUtils::MM_Unix --add version::; File::Spec::Functions; File::Spec; File::Spec::Win32; File::Spec::Unix --icon C:\Users\Cmdr_Colstel\Downloads\1440576270_appicns_iTunes.ico --lib L:\Perl64\bin --norunlib --nologo --verbose --force --exe Key_Fl +ipper.exe --perl L:\Perl64\bin\perl.exe

      I was forced to add the module File::Spec::Unix because File::Spec::Win32 references it and PerlApp fails to create an executable without it. But even upon adding the module, PerlApp fails to create the Unix.dll in the auto folder. Any help is appreciated. Thanks.

        It looks like you're using a lot of options - especially --trim (presumably to reduce the size of the executable that is created). Have you tried to reducing the the number of PerlApp options that you use to see if you can successfully create a working executable? Just was wondering if you might have conflicting options or an option that is preventing PerlApp from including the needed modules.

        Otherwise, I'd agree with the suggestion about using ActiveState's user forums to ask for help for using ActiveState's product.

Re: Unix.dll not Found in PerlApp
by Anonymous Monk on Sep 15, 2015 at 13:48 UTC

      Yeah, I do have a lot of added modules. Didn't intend for it, but as I ran PerlApp to create the executable, it kept saying it couldn't find this or that module. So as I added the modules manually and it found them and the errors disappeared. However, it still gets stuck on Unix.dll. If I find out how to get\create it, that should be the missing piece.

      The program is supposed to wrap all modules/dlls, along with my script, in a package so it doesn't need an installed version of Perl on the executing Windows machine.

      I will consult with ActiveState as you suggested. Just thought someone might have run across the same situation here. Thanks.