----- Original Message ----- From: "Erland Sommarskog" <esq...@sommarskog.se>
To: <perl-xs@perl.org>
Sent: Tuesday, August 02, 2011 7:55 AM
Subject: Problem with building XS module on AS 1401


I have a module Win32::SqlServer, which I distribute with binaries for
ActivePerl. With the release of 5.14, I want to provide binaries for
this version as well. For x64 it works without problem. However, I have
trouble with 32-bit Perl. The module builds without errors, but when
running test scripts, there are messages about bizarre and unknown
things. Perl may crash or go into an infinite loop. If I try to run a
script with "perl -d", I get a SEGV on the line "use Win32::SqlServer".
I narrowed this down to this call in the bootstrap code:

  call_list(PL_scopestack_ix, PL_unitcheckav);

I've also built Perl 5.14.1 from sources for x86, and under this build,
my module builds and runs without problem.

Right now I'm a little confused on what to try next, but I figured if
I could ask if there are any known issues.

If you want your binaries to work with 5.14.x (for all values of x) you should build them using 5.14.0. There could conceivably be problems if binaries built using 5.14.1 were to be run on 5.14.0 - though I've not experienced anything like the mysterious problems you're describing.

If your 32-bit perl, and therefore also your binaries, use a runtime other than msvcrt.dll (eg msvcr80.dll), then that also can cause *big* problems - in the form of a crash. ActivePerl uses the msvcrt.dll runtime, and that runtime won't know what to make of any handles passed to it that were created by a different runtime. If that's happening with your 32-bit builds, then the only solution I know of is to use a compiler (and a perl) that *does* use the msvcrt.dll runtime - eg MSVC++ 6.0 or MinGW (and a perl built with the same).

If that is the problem, I would also think you would then get the same issue with earlier versions of ActivePerl. Did that happen ?

Does the problem arise only when you use *ActivePerl* with your compiler to build your module ? Do you get a similar problem if you take the binaries that tested fine on *your* build of perl-5.14.1, and use them with ActivePerl-5.14.1 ?

Revelant information may be that I've build my module on an x64 machine,
using the C++ compiler from either VS2005 or VS2010. (The module does
not compile with earlier versions.)

I've built quite a few binaries on an x64 machine for both 32-bit and 64-bit ActivePerls and haven't struck any problems of the type you describe.

Jan Dubois possibly has some ideas (and definitely has a better understanding) about this. If he doesn't turn up here, and you wish to get some feedback from him, try posting to the perl-win32-users list hosted by ActiveState - he seems to keep a close eye on that list.

Cheers,
Rob

Reply via email to