[Scons-users] Building versioned shared library fails when using MinGW
Ray Speth
speth at darkmatter.mit.edu
Sun Nov 27 17:39:58 EST 2016
I'm using MinGW-w64 [1], but not sure how much that has to do with it
(given that the error can be triggered without even having MinGW installed).
The SharedLibrary builder actually works reasonably well with Cygwin. In
that case, I end up with:
cygfoo-2-4-0.dll
libfoo.dll.a -> libfoo-2-4-0.dll.a (symlink)
libfoo-2-4-0.dll.a
which can be linked to simply as '-lfoo'.
Using MSVC, I don't seem to get any files with the version info in the
name, but at least it compiles.
Regards,
Ray
[1] https://sourceforge.net/projects/mingw-w64/
On 11/27/2016 3:55 PM, Bill Deegan wrote:
> Yes dylib is because I ran your example on macosx.
>
> How did you install mingw? via cygwin? other?
>
> I can try installing on my system, but I'd like to replicate your install.
>
>
>
> On Sun, Nov 27, 2016 at 11:48 AM, Ray Speth <speth at darkmatter.mit.edu
> <mailto:speth at darkmatter.mit.edu>> wrote:
>
> 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.
>
>
> Nope that's not the issue here.
>
> The issue seems to be the generated name of the versioned shared library.
> So either for mingw the SHLIBVERSION should be ignored, or the name
> format needs to change.
>
> If you comment out SHLIBVERSION='2.4' it works fine (at least on my mac).
>
> -Bill
>
>
>
> Regards,
> Ray
>
> [1]
> https://autotools.io/libtool/windows.html#libtool.windows.version
> <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>
> <mailto: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>>
> <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:
>
> 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>>
>
>
> <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>>>
> <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
> <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>>>
> <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
> <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>>
>
> <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>>
> <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>>
>
> <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>>
> <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>>
>
> <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