This is the mail archive of the
mailing list for the Cygwin project.
Re: bug: configuration problem in perl with gcc libs
- From: Ken Brown <kbrown at cornell dot edu>
- To: cygwin at cygwin dot com
- Date: Sun, 5 Jun 2016 18:28:02 -0400
- Subject: Re: bug: configuration problem in perl with gcc libs
- Authentication-results: sourceware.org; auth=none
- References: <20160603161419 dot GA5300 at karasik2>
On 6/3/2016 12:14 PM, Dmitry Karasik wrote:
I'd like to report a configuration bug in perl. The problem arises when a 3-rd
party module tries to build an extension using perl configuration with a
Generally perl extensions don't have a way to specify library to link with
directly, they do that through ExtUtils::MakeMaker, the standard tool for that.
Which in turn tries to resolve '-llibname' using its own
compile-time-configured internal list of lib paths. Everything works so far
libraries are found in perl's libpth (see by running 'perl -V:libpth') which is
/usr/lib on my machine. The problem arises when I need to link together with
libgomp, which is not found there, being a gcc-version-specific library.
For example, the following minimal Makefile.PL configure script
WriteMakefile(NAME => 'foo', LIBS => '-lgomp');
will emit a warning
Warning (mostly harmless): No library found for -lgomp
and removes -lgomp from the linker command, resulting in perl extension not
being able to compile.
The problem is confirmed, when, if I edit perl configuration file
/usr/lib/perl5/5.22/i686-cygwin-threads-64int/Config.pm, everything works:
ldlibpthname => 'PATH',
- libpth => '/usr/lib',
+ libpth => '/usr/lib /usr/lib/gcc/i686-pc-cygwin/5.3.0',
osname => 'cygwin',
I believe perl needs to be built with the properly set/found libpth in advance.
I'm no perl expert, but this doesn't strike me as a good solution. It
means that a specific gcc version is hard-coded into perl.
It seems to me that the bug is in perl's algorithm (in
/usr/lib/perl5/5.22/ExtUtils/Liblist/Kid.pm) for finding libraries of
the form -lfoo. There's a special case for Cygwin at line 171 that
looks for foo.dll (if it hasn't found libfoo.dll.a), which is wrong for
two reasons. First, it should look for cygfoo*.dll instead (or in
addition). Second, it should look in the path, or at least in /usr/bin,
rather than in libpth.
In the present case of -lgomp, it would have found /usr/bin/cyggomp-1.dll.
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple