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

Update: Anyone else encountering this problem, if you get GD v2.41 from Bribes repository, the problem "goes away". Which is nice!

I just upgraded my GD install to v2.41 using PPM. The install went through cleanly, but when I try to run a program that uses GD, new or previously working existing code, I get the error: "The procedure entrypoint Perl_newXS_flags could not be located in the dynamic link library perl58.dll"

And this is displayed on the command line:

Can't load 'c:/Perl/site/lib/auto/GD/GD.dll' for module GD: load_file: The specified procedure could not be found at c:/Perl/lib/DynaLoader.p +m line 230.

I understand the error message, and can confirm that perl58.dll doesn't contain that entrypoint. What I'd like to know is: why is GD.dll trying to access an entrypoint that doesn't exist?

That is, what does it say about the PPD I installed? Am I getting a PPD that was built for 5.10? Was it built with a different compiler?

I'm fairly sure that none of the repositories I have set up are meant to be delivering 5.10 builds:

ppm> rep Repositories: [1] ActiveState Package Repository [2] winnipeg [3] bribes [4] trouchell ppm> rep describe 1 Describing Active Repository 1: Name: ActiveState Package Repository Location: http://ppm.ActiveState.com/PPM/ppmserver-5.8-windows.plex?ur +n:/PPM/Server/SQL Type: PPMServer 3.0 ppm> rep describe 2 Describing Active Repository 2: Name: winnipeg Location: http://theoryx5.uwinnipeg.ca/ppms/ Type: Webpage ppm> rep describe 3 Describing Active Repository 3: Name: bribes Location: http://www.bribes.org/perl/ppm/ Type: Webpage ppm> rep describe 4 Describing Active Repository 4: Name: trouchell Location: http://trouchelle.com/ppm/ Type: Webpage

Finally, is there a way to get an earlier PPD (say version 2.39 which previously ran okay)? I worked out how to remove v2.41, but that doesn't put the previous version back.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re: Newly installed package has problem with perl58.dll
by Anonymous Monk on Feb 17, 2009 at 03:54 UTC
    You need to get the latest 5.8.x version, it will have that symbol. 5.8.x has broken binary compatibility several times.
      This was previously covered in Class::MOP and MOP.dll. To build a binary for 5.8.x, you need to build it against 5.8.0. Within a given 5.x, newer versions don't break compatibility with older binaries, but newer binaries are not necessarily compatible with older versions of Perl.
        it depends which version of Perl was used when it was built?

        Yep - if the ppm is built with perl-5.8.0, then there's no problem. But if the ppm is built with perl-5.8.x (where x is non-zero), then it may not work with anything other than perl-5.8.x.

        Cheers,
        Rob
      That's a misstatement. 5.8.x has only tried to maintain one kind of backwards compatibility: that modules built with older versions continue to run with newer perl versions. Having modules built with newer perls be usable on older perls has never been a goal, so I don't think you can call it breaking binary comptibility.