[Scons-users] Building versioned shared library fails when using MinGW

Ray Speth speth at darkmatter.mit.edu
Sun Nov 27 14:48:03 EST 2016


I'm not entirely sure. I found some info for Autotools [1] that suggests 
it should create 'libfoo-2.dll', and just looking through my MinGW 
installation, it looks like there are a fair number of libraries that 
follow this convention. I thought 'dylib' was just an OS X thing. I've 
certainly never seen it on Windows.

One thought I had as to why SCons is complaining about multiple targets 
is because building a shared library on Windows *does* require 
generating multiple files -- you need both the DLL and the corresponding 
"import library" (likely named 'libfoo-2.dll.a' when using MinGW) that 
is used when linking to the DLL.

Regards,
Ray

[1] https://autotools.io/libtool/windows.html#libtool.windows.version

On 11/26/2016 11:07 PM, Bill Deegan wrote:
> What's the proper naming for a versioned shared library under mingw?
>
> Currently for your example it's trying to create :  libfoo.dylib.2.4
>
> -Bill
>
> On Sat, Nov 26, 2016 at 4:34 PM, Ray Speth <speth at darkmatter.mit.edu
> <mailto:speth at darkmatter.mit.edu>> wrote:
>
>     If I name the target 'foo.dll', then the error becomes:
>
>     scons: *** Multiple ways to build the same target were specified
>     for: foo.dll
>
>     If I change the name to 'foo.bar' then the error references the name
>     'foo.bar'.
>
>     Adding either '--deub=presub' or '--tree=prune' does not provide any
>     additional information. The output from running 'scons
>     --debug-stacktrace' has been added to the previously-linked Gist.
>
>     I would also note that debugging this does not necessarily require
>     having MinGW installed. I am able to replicate this bug on an Ubuntu
>     system as well, with the exception that in the "working" case you
>     end up calling the system GCC with some flags that it doesn't like
>     and compilation fails, as expected.
>
>     Regards,
>     Ray
>
>     On 11/24/2016 11:05 PM, Bill Deegan wrote:
>
>         What happens when you change the target for SharedLibrary to
>         'foo.dll' ?
>
>         On Tue, Nov 22, 2016 at 7:57 PM, Ray Speth
>         <speth at darkmatter.mit.edu <mailto:speth at darkmatter.mit.edu>
>         <mailto:speth at darkmatter.mit.edu
>         <mailto:speth at darkmatter.mit.edu>>> wrote:
>
>             Bill,
>
>             Adding the --tree=prune and --deub=presub options don't
>         change the
>             output. The value of CCCOM is '$CC -o $TARGET -c $CFLAGS
>         $CCFLAGS
>             $_CCCOMCOM $SOURCES'. According to env.subst, this works out
>         to 'gcc
>             -o -c'.
>
>             The output from adding the --debug=stacktrace option are
>         posted at
>
>         https://gist.github.com/speth/6f022116c3a1273952afe8167c6388ae
>         <https://gist.github.com/speth/6f022116c3a1273952afe8167c6388ae>
>
>         <https://gist.github.com/speth/6f022116c3a1273952afe8167c6388ae
>         <https://gist.github.com/speth/6f022116c3a1273952afe8167c6388ae>>,
>             along with the full output of 'print env.Dump()'.
>
>             Regards,
>             Ray
>
>             On 11/20/2016 6:43 PM, Bill Deegan wrote:
>
>                 Ray,
>
>                 I don't have mingw installed on a system I have readily
>                 available today.
>                 Can you pastebin the output for the following:
>
>                 scons --tree=prune
>                 scons --deub=presub
>
>                 Add:
>
>                 print env.Dump('CCCOM')
>
>                 To you Sconstruct and run scons and copy that output as
>         well.
>
>                 Thanks,
>
>                 Bill
>
>
>
>                 On Sat, Nov 19, 2016 at 5:59 PM, Ray Speth
>                 <speth at darkmatter.mit.edu
>         <mailto:speth at darkmatter.mit.edu>
>         <mailto:speth at darkmatter.mit.edu <mailto:speth at darkmatter.mit.edu>>
>                 <mailto:speth at darkmatter.mit.edu
>         <mailto:speth at darkmatter.mit.edu>
>                 <mailto:speth at darkmatter.mit.edu
>         <mailto:speth at darkmatter.mit.edu>>>> wrote:
>
>
>                     Hi,
>
>                     I have encountered an apparent bug when trying to build
>                     versioned
>
>                 shared libraries with MinGW. A minimal SConstruct:
>
>
>                         env = Environment(tools=['mingw'])
>                         lib = env.SharedLibrary('foo', ['foo.cpp'],
>                     SHLIBVERSION='2.4')
>                         env.AlwaysBuild(lib)
>
>                     generates the following output:
>
>                         scons: Reading SConscript files ...
>                         scons: *** A shared library should have exactly one
>                     target with the
>                     suffix: .dll
>                         File "path\to\SConstruct", line 2, in <module>
>
>                     I have tested this with SCons 2.4.1, 2.5.0, and
>         2.5.1, with
>                     the same
>
>                 results.
>
>
>                     Regards,
>                     Ray
>                     _______________________________________________
>                     Scons-users mailing list
>                     Scons-users at scons.org <mailto:Scons-users at scons.org>
>         <mailto:Scons-users at scons.org <mailto:Scons-users at scons.org>>
>                     <mailto:Scons-users at scons.org
>         <mailto:Scons-users at scons.org> <mailto:Scons-users at scons.org
>         <mailto:Scons-users at scons.org>>>
>
>         https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>
>
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>>
>
>
>
>
>                 _______________________________________________
>                 Scons-users mailing list
>                 Scons-users at scons.org <mailto:Scons-users at scons.org>
>         <mailto:Scons-users at scons.org <mailto:Scons-users at scons.org>>
>                 https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>
>                 <https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>>
>
>             _______________________________________________
>             Scons-users mailing list
>             Scons-users at scons.org <mailto:Scons-users at scons.org>
>         <mailto:Scons-users at scons.org <mailto:Scons-users at scons.org>>
>             https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>
>             <https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>>
>
>
>
>
>         _______________________________________________
>         Scons-users mailing list
>         Scons-users at scons.org <mailto:Scons-users at scons.org>
>         https://pairlist4.pair.net/mailman/listinfo/scons-users
>         <https://pairlist4.pair.net/mailman/listinfo/scons-users>
>
>     _______________________________________________
>     Scons-users mailing list
>     Scons-users at scons.org <mailto:Scons-users at scons.org>
>     https://pairlist4.pair.net/mailman/listinfo/scons-users
>     <https://pairlist4.pair.net/mailman/listinfo/scons-users>
>
>
>
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>


More information about the Scons-users mailing list