[Scons-users] SharedLibrary + SHLIBVERSION and cygwin

Paweł Tomulik ptomulik at meil.pw.edu.pl
Tue Aug 18 17:11:46 EDT 2015


No, it doesn't seem to help:

ptomulik at mwnotebook:$ scons --tree=all
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o foo.os -c -I. foo.cpp
g++ -o cygfoo-0-1-2.dll -Wl,-no-undefined -shared -Wl,-Bsymbolic 
-Wl,--out-implib,cygfoo-0-1-2.a -Wl,--out-implib=libfoo-0-1-2.dll.a 
-Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive 
foo.os -Wl,--no-whole-archive -L.
g++ -o main.o -c -I. main.cpp
g++ -o main.exe -Wl,-no-undefined main.o -L. -lfoo
/bin/ld: cannot find -lfoo
collect2: error: ld returned 1 exit status
scons: *** [main.exe] Error 1
+-.
   +-cygfoo-0-1-2.dll
   | +-foo.os
   |   +-foo.cpp
   |   +-/bin/g++
   +-cygfoo.dll
   +-foo.cpp
   +-foo.hpp
   +-foo.os
   | +-foo.cpp
   | +-/bin/g++
   +-libfoo-0-1-2.dll.a
   | +-foo.os
   |   +-foo.cpp
   |   +-/bin/g++
   +-main.cpp
   +-main.exe
   | +-main.o
   | | +-main.cpp
   | | +-foo.hpp
   | | +-/bin/g++
   | +-/bin/g++
   +-main.o
   | +-main.cpp
   | +-foo.hpp
   | +-/bin/g++
   +-SConstruct
scons: building terminated because of errors.


After a single scons pass I see the following files in tree:

ptomulik at mwnotebook:$ ls -lah
razem 28K
drwxr-xr-x+ 1 ptomulik Brak    0 08-18 22:34 .
drwxrwxrwt  1 ptomulik root    0 08-18 22:34 ..
-rw-r--r--  1 ptomulik Brak 9,7K 08-18 22:34 .sconsign.dblite
lrwxrwxrwx  1 ptomulik Brak   18 08-18 22:34 cygfoo-0-1-2.dll -> 
cygfoo-0-1-2.dll.0
lrwxrwxrwx  1 ptomulik Brak   16 08-18 22:34 cygfoo-0-1-2.dll.0 -> 
cygfoo-0-1-2.dll
-rw-r--r--  1 ptomulik Brak   25 08-10 11:12 foo.cpp
-rw-r--r--  1 ptomulik Brak   50 08-10 11:12 foo.hpp
-rw-r--r--  1 ptomulik Brak  616 08-18 22:34 foo.os
-rw-r--r--  1 ptomulik Brak 2,8K 08-18 22:34 libfoo-0-1-2.dll.a
-rw-r--r--  1 ptomulik Brak   48 08-10 11:14 main.cpp
-rw-r--r--  1 ptomulik Brak  680 08-18 22:34 main.o
-rw-r--r--  1 ptomulik Brak 1,3K 08-10 11:37 README.txt
-rw-r--r--  1 ptomulik Brak  242 08-10 11:51 SConstruct

Instead of the shared library cygfoo-*.dll I've got two symlinks with a 
circular dependency. I'm newbie here, but taking a look into my /usr/lib 
I can't see much "versioned names" with symlinks that would resemble the 
usual Linux way of shlib versioning. Quite better under /usr/bin/ where 
cygwin stored cyg*.dll stuff, but there is still quite small number of 
such symlinks. Has anyone checked whet is the standard way of 
implementing versioned libraries on cygwin (if there is any)? Do you 
know any docs, which describe it?

Anyway, with unmodified SCons source, I let myself to perform two simple 
experiments. First, I've ran scons once (which failed), then created the 
following symlink

ln -s libfoo-0-1-2.dll.a libfoo.dll.a

and ran scons again - the mini-project was built successfully now.

Second experiment was similar, just with:

ln -s cygfoo-0-1-2.dll cygfoo.dll

and it let me build the project as well.

The difference between the two was that in the second case, scons -c 
cleaned up the symbolic link cygfoo.dll, whereas in the first case the 
link libfoo.dll.a was not cleaned up.



W dniu 2015-08-18 17:31, Bill Deegan pisze:
> Try changing line 259 of SCons/Tool/__init__.py from:
>
>      elif platform == 'posix' or platform == 'sunos':
>
> to
>      elif platform == 'posix' or platform == 'sunos' or platform ==
> 'cygwin':
>
> And see if that fixes it.
>
> -Bill
>
>
> On Tue, Aug 18, 2015 at 10:23 AM, Paweł Tomulik <ptomulik at meil.pw.edu.pl
> <mailto:ptomulik at meil.pw.edu.pl>> wrote:
>
>     I'm not sure,
>
>     AFAIR I only use packages installed via cygwin's "setup.exe"
>     utility. I'm not 100% concious of how that stuff works...
>
>
>     On 2015-08-18 15:57, Bill Deegan wrote:
>
>         Looks like you are using the mingw tools and not native cygwin
>         compiler?
>
>         -Bill
>
>         On Tue, Aug 18, 2015 at 8:58 AM, Paweł Tomulik
>         <ptomulik at meil.pw.edu.pl <mailto:ptomulik at meil.pw.edu.pl>> wrote:
>
>             Hi all,
>
>             I just started experimenting with SCons on cygwing trying to
>             port
>             one of my projects to cygwin. Looks like I'm unlucky with the
>             SharedLibrary builder or just misunderstand how stuff works.
>
>             At the moment I'm trying to build a minimal project with one
>             executable and one shared library. The following is build report
>             from that simple project (attached) on cygwin, SCons 2.3.4,
>             python
>             2.7.10:
>
>             ptomulik at mwnotebook:$ scons --tree=all
>             scons: Reading SConscript files ...
>             scons: done reading SConscript files.
>             scons: Building targets ...
>             g++ -o cygfoo-0-1-2.dll -Wl,-no-undefined -shared -Wl,-Bsymbolic
>             -Wl,--out-implib,cygfoo-0-1-2.a
>             -Wl,--out-implib=libfoo-0-1-2.dll.a
>             -Wl,--export-all-symbols -Wl,--enable-auto-import
>             -Wl,--whole-archive foo.os -Wl,--no-whole-archive -L.
>             g++ -o main.exe -Wl,-no-undefined main.o -L. -lfoo
>             /bin/ld: cannot find -lfoo
>             collect2: error: ld returned 1 exit status
>             scons: *** [main.exe] Error 1
>             +-.
>             +-cygfoo-0-1-2.dll
>             | +-cygfoo-0-1-2.dll
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-cygfoo-0-1-2.dll
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-foo.cpp
>             +-foo.hpp
>             +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-libfoo-0-1-2.dll.a
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-main.cpp
>             +-main.exe
>             | +-main.o
>             | | +-main.cpp
>             | | +-foo.hpp
>             | | +-/bin/g++
>             | +-/bin/g++
>             | +-cygfoo-0-1-2.dll
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-main.o
>             | +-main.cpp
>             | +-foo.hpp
>             | +-/bin/g++
>             +-SConstruct
>             scons: building terminated because of errors.
>
>             This is for SCons 2.3.5:
>
>             ptomulik at mwnotebook:$ scons --tree=all
>             scons: Reading SConscript files ...
>             scons: done reading SConscript files.
>             scons: Building targets ...
>             g++ -o foo.os -c -I. foo.cpp
>             g++ -o cygfoo-0-1-2.dll -Wl,-no-undefined -shared -Wl,-Bsymbolic
>             -Wl,--out-implib,cygfoo-0-1-2.a
>             -Wl,--out-implib=libfoo-0-1-2.dll.a
>             -Wl,--export-all-symbols -Wl,--enable-auto-import
>             -Wl,--whole-archive foo.os -Wl,--no-whole-archive -L.
>             g++ -o main.o -c -I. main.cpp
>             g++ -o main.exe -Wl,-no-undefined main.o -L. -lfoo
>             /bin/ld: cannot find -lfoo
>             collect2: error: ld returned 1 exit status
>             scons: *** [main.exe] Error 1
>             +-.
>             +-cygfoo-0-1-2.dll
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-cygfoo.dll
>             +-foo.cpp
>             +-foo.hpp
>             +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-libfoo-0-1-2.dll.a
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-main.cpp
>             +-main.exe
>             | +-main.o
>             | | +-main.cpp
>             | | +-foo.hpp
>             | | +-/bin/g++
>             | +-/bin/g++
>             +-main.o
>             | +-main.cpp
>             | +-foo.hpp
>             | +-/bin/g++
>             +-SConstruct
>             scons: building terminated because of errors.
>
>             This is for SCons 2.3.6:
>
>             ptomulik at mwnotebook:$ scons --tree=all
>             scons: Reading SConscript files ...
>             scons: done reading SConscript files.
>             scons: Building targets ...
>             g++ -o foo.os -c -I. foo.cpp
>             g++ -o cygfoo-0-1-2.dll -Wl,-no-undefined -shared -Wl,-Bsymbolic
>             -Wl,--out-implib,cygfoo-0-1-2.a
>             -Wl,--out-implib=libfoo-0-1-2.dll.a
>             -Wl,--export-all-symbols -Wl,--enable-auto-import
>             -Wl,--whole-archive foo.os -Wl,--no-whole-archive -L.
>             g++ -o main.o -c -I. main.cpp
>             g++ -o main.exe -Wl,-no-undefined main.o -L. -lfoo
>             /bin/ld: cannot find -lfoo
>             collect2: error: ld returned 1 exit status
>             scons: *** [main.exe] Error 1
>             +-.
>             +-cygfoo-0-1-2.dll
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-cygfoo.dll
>             +-foo.cpp
>             +-foo.hpp
>             +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-libfoo-0-1-2.dll.a
>             | +-foo.os
>             | +-foo.cpp
>             | +-/bin/g++
>             +-main.cpp
>             +-main.exe
>             | +-main.o
>             | | +-main.cpp
>             | | +-foo.hpp
>             | | +-/bin/g++
>             | +-/bin/g++
>             +-main.o
>             | +-main.cpp
>             | +-foo.hpp
>             | +-/bin/g++
>             +-SConstruct
>             scons: building terminated because of errors.
>
>             Could someone help me pls? What is the proper way to write a
>             portable SConstruct file, such that the attached project
>             could build
>             on Most platforms? Do I need a versioned shared libs at all on
>             cygwin? It seems like the SONAME stuff does not apply here?
>
>             --
>             Paweł Tomulik
>
>             _______________________________________________
>             Scons-users mailing list
>             Scons-users at scons.org <mailto:Scons-users at scons.org>
>             https://pairlist4.pair.net/mailman/listinfo/scons-users [1]
>
>
>
>
>         Links:
>         ------
>         [1] 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
>
>
>     _______________________________________________
>     Scons-users mailing list
>     Scons-users at scons.org <mailto:Scons-users at scons.org>
>     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
>


-- 
Paweł Tomulik
Instytut Techniki Lotniczej i Mechaniki Stosowanej
Politechnika Warszawska


More information about the Scons-users mailing list