Subject: | Gcc errors when upgrading some modules for Strawberry portable. |
Date: | Tue, 2 Aug 2016 11:45:33 -0400 |
To: | "bug-Perl-Dist-Strawberry [...] rt.cpan.org" <bug-Perl-Dist-Strawberry [...] rt.cpan.org> |
From: | Charles Stuart Lemmen <CLemmen [...] excelsiorintegrated.com> |
First, some background info:
Distro name/ver: Data::Dumper 2.160 -upgrading to- 2.161
Perl ver: (Strawberry) This is perl 5, version 24, subversion 0 (v5.24.0) built for MSWin32-x64-multi-thread
O/S: Microsoft Windows [Version 10.0.10586]
Details: I downloaded and installed Strawberry Perl portable version thinking this would be a good distro to use in a shared environment. Everything went well including upgrading a good number of packages within CPAN (running inside the portable shell). However, there were a handful of upgrades that didn't work. Among them:
Package namespace installed latest in CPAN file
DBIx::Class 0.082821 0.082840 RIBASUSHI/DBIx-Class-0.082840.tar.gz
Data::Dumper 2.160 2.161 SMUELLER/Data-Dumper-2.161.tar.gz
Net::SSLeay 1.74 1.77 MIKEM/Net-SSLeay-1.77.tar.gz
The errors were somewhat different between packages, here's one example:
Show quoted text
cpan> upgrade Net::SSLeay
Database was generated on Tue, 02 Aug 2016 15:00:07 GMT
Package namespace installed latest in CPAN file
Net::SSLeay 1.74 1.77 MIKEM/Net-SSLeay-1.77.tar.gz
Running install for module 'Net::SSLeay'
Checksum for O:\perl\cpan\sources\authors\id\M\MI\MIKEM\Net-SSLeay-1.77.tar.gz ok
Scanning cache O:\perl\cpan\build for sizes
....................................................................--------DONE
DEL(1/19): O:\perl\cpan\build\Test-FailWarnings-0.008-0
DEL(2/19): O:\perl\cpan\build\Test-FailWarnings-0.008-0.yml
DEL(3/19): O:\perl\cpan\build\Perl-OSType-1.010-0
DEL(4/19): O:\perl\cpan\build\Perl-OSType-1.010-0.yml
DEL(5/19): O:\perl\cpan\build\PkgConfig-0.12026-0
DEL(6/19): O:\perl\cpan\build\PkgConfig-0.12026-0.yml
DEL(7/19): O:\perl\cpan\build\Pod-Checker-1.73-0
DEL(8/19): O:\perl\cpan\build\Pod-Checker-1.73-0.yml
DEL(9/19): O:\perl\cpan\build\Pod-Perldoc-3.26-0
DEL(10/19): O:\perl\cpan\build\Pod-Perldoc-3.26-0.yml
DEL(11/19): O:\perl\cpan\build\Pod-Usage-1.69-0
DEL(12/19): O:\perl\cpan\build\Pod-Usage-1.69-0.yml
DEL(13/19): O:\perl\cpan\build\SOAP-Lite-1.20-0
DEL(14/19): O:\perl\cpan\build\SOAP-Lite-1.20-0.yml
DEL(15/19): O:\perl\cpan\build\XML-SemanticDiff-1.0004-0
DEL(16/19): O:\perl\cpan\build\XML-SemanticDiff-1.0004-0.yml
DEL(17/19): O:\perl\cpan\build\Test-XML-0.08-0
DEL(18/19): O:\perl\cpan\build\Test-XML-0.08-0.yml
DEL(19/19): O:\perl\cpan\build\Cpanel-JSON-XS-3.0217-F5sGIk
cannot remove directory for O:\perl\cpan\build\Cpanel-JSON-XS-3.0217-F5sGIk: Permission denied at O:\perl\perl\lib/CPAN/CacheMgr.pm line 161.
Configuring M/MI/MIKEM/Net-SSLeay-1.77.tar.gz with Makefile.PL
WARNING: can't open config file: /z/extlib/_2016Q2__/ssl/openssl.cnf
*** Found OpenSSL-1.0.2h installed in O:\perl\perl\..\c
*** Be sure to use the same compiler and options to compile your OpenSSL, perl,
and Net::SSLeay. Mixing and matching compilers is not supported.
Do you want to run external tests?
These tests *will* *fail* if you do not have network connectivity. [n] y
Checking if your kit is complete...
Looks good
Generating a dmake-style Makefile
Writing Makefile for Net::SSLeay
Writing MYMETA.yml and MYMETA.json
MIKEM/Net-SSLeay-1.77.tar.gz
O:\perl\perl\bin\perl.exe Makefile.PL -- OK
Running make for M/MI/MIKEM/Net-SSLeay-1.77.tar.gz
dmake.exe: Warning: -- Target [config] was made but the time stamp has not been updated.
cp lib/Net/SSLeay.pod blib\lib\Net\SSLeay.pod
cp lib/Net/SSLeay/Handle.pm blib\lib\Net\SSLeay\Handle.pm
cp lib/Net/SSLeay.pm blib\lib\Net\SSLeay.pm
AutoSplitting blib\lib\Net\SSLeay.pm (blib\lib\auto\Net\SSLeay)
blib\lib\Net\SSLeay.pm: some names are not unique when truncated to 8 characters:
directory blib\lib\auto\Net\SSLeay:
do_https3.al, do_https2.al, do_https4.al, do_https.al truncate to do_https
do_httpx3.al, do_httpx2.al, do_httpx4.al truncate to do_httpx
get_https.al, get_https3.al, get_https4.al, get_http.al, get_http3.al, get_http4.al, get_httpx.al, get_httpx3.al, get_httpx4.al truncate to get_http
head_https.al, head_https3.al, head_https4.al, head_http.al, head_http3.al, head_http4.al, head_httpx.al, head_httpx3.al, head_httpx4.al truncate to head_htt
post_https.al, post_https3.al, post_https4.al, post_http.al, post_http3.al, post_http4.al, post_httpx.al, post_httpx3.al, post_httpx4.al truncate to post_htt
put_https.al, put_https3.al, put_https4.al, put_http.al, put_http3.al, put_http4.al, put_httpx.al, put_httpx3.al, put_httpx4.al truncate to put_http
ssl_read_all.al, ssl_read_until.al, ssl_read_CRLF.al truncate to ssl_read
ssl_write_all.al, ssl_write_CRLF.al truncate to ssl_writ
tcp_read_all.al, tcp_read_until.al, tcp_read_CRLF.al truncate to tcp_read
tcp_write_all.al, tcp_write_CRLF.al truncate to tcp_writ
dmake.exe: Warning: -- Target [pm_to_blib] was made but the time stamp has not been updated.
Running Mkbootstrap for SSLeay ()
"O:\perl\perl\bin\perl.exe" "-Iinc" -MExtUtils::Command -e chmod -- 644 "SSLeay.bs"
dmake.exe: Warning: -- Target [SSLeay.bs] was made but the time stamp has not been updated.
"O:\perl\perl\bin\perl.exe" "-Iinc" -MExtUtils::Command::MM -e cp_nonempty -- SSLeay.bs blib\arch\auto\Net\SSLeay\SSLeay.bs 644
"O:\perl\perl\bin\perl.exe" "-Iinc" "O:\perl\perl\lib\ExtUtils\xsubpp" -typemap O:\perl\perl\lib\ExtUtils\typemap -typemap O:\perl\cpan\build\Net-SSLeay-1.77-4\typemap SSLeay.xs > SSLeay.xsc
"O:\perl\perl\bin\perl.exe" "-Iinc" -MExtUtils::Command -e mv -- SSLeay.xsc SSLeay.c
gcc -c -IO:\perl\perl\..\c/include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 -DVERSION=\"1.77\" -DXS_VERSION=\"1.77\" "-IO:\perl\perl\lib\CORE" SSLeay.c
dmake.exe: Error code 134, while making 'SSLeay.o'
MIKEM/Net-SSLeay-1.77.tar.gz
O:\perl\c\bin\dmake.exe -- NOT OK
Stopping: 'install' failed for 'Net::SSLeay'.
Failed during this command:
MIKEM/Net-SSLeay-1.77.tar.gz : make NO
What they all had in common however is that during the attempted installation, Windows throws up a gcc.exe error along the lines that the compiler has stopped working. I realized it was possible that perhaps there were other Perls in my PATH that could be negatively affecting this process. However, after cleaning up my PATH environment var I was still receiving a gcc.exe compiler Application error:
"The application was unable to start correctly (0xc0000006)."
Googling led me to discover that the issue was from running cpan, and ultimately gcc.exe, from a non-local drive. The error has something to do with failed paging within the compiler application, a known problem when not run from a local drive. See EG:
http://stackoverflow.com/questions/20050368/unable-to-start-applications-from-network-0xc0000006
This proved correct for as soon as I copied my entire portable Strawberry folder to C:\perl, started the portable shell, started cpan, and upgraded the previously failed package - it upgraded without error. They all did.
So, for the most part the Portable Strawberry Perl is quite portable but there very well may be some packages that one won't be able to install and/or upgrade without first having to move/copy the entire installation to a local drive and then ultimately back again. Perhaps there is a way to create a (portable) version of gcc.exe (and other executables that cpan uses) that is not sensitive to running on a non-local drive (the stackoverflow link above, amongst others I found, suggests there are helpful compiler flags (EG 'IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP') that can help create executables that do not exhibit these errors.
Thanks for listening and providing Strawberry! It's yummy.
-Stuart
Stuart Lemmen
IT Development & Support
Excelsior Integrated LLC
413-394-4340
clemmen@excelsiorintegrated.com<mailto:clemmen@excelsiorintegrated.com>
www.excelsiorintegrated.com<http://www.excelsiorintegrated.com/>
[cid:image001.png@01D1ECB1.4B43DC00][cid:image003.jpg@01D1ECB3.60B2B280]
Message body is not shown because it is too large.