[prev in list] [next in list] [prev in thread] [next in thread]
List: opensuse-buildservice
Subject: Re: [opensuse-buildservice] Is there a reason my factory package suddenly fails to build?
From: Greg Freemyer <greg.freemyer () gmail ! com>
Date: 2013-12-12 13:46:30
Message-ID: 2b0841a5-0f77-43f0-bc38-4bb2784741d9 () email ! android ! com
[Download RAW message or body]
Jan,
You obviously spent a lot of time looking at this. Thank you and it will take me a \
few days to digest your results.
Greg
Jan Engelhardt <jengelh@inai.de> wrote:
>
> On Wednesday 2013-12-11 19:14, Greg Freemyer wrote:
> > > > suddenly it doesn't compile due to a C++ code issue:
> > > >
> > > > https://build.opensuse.org/package/live_build_log/openSUSE:Factory/sleuthkit/standard/x86_64
> > > >
> > > > Is there something in flux in factory and I should just ignore this?
> > >
> > > It would seem that libtsk.so is built without having all its
> dependencies
> > > specified. (In short, `ldd -r libtsk.so` returns unresolved
> symbols.)
> > >
> > > See the "Re: [opensuse-packaging] Packages failing to link" thread.
> >
> > I must be doing this wrong. I did a local build, then a traditional
> > "cd" to the directory where the new libtsk.so is. ldd -r libtsk.so is
> > showing me lots of what looks to me like the normal c++ stuff
> > undefined. What do I need to do before calling ldd -r libtsk.so?
>
> Your linker problem is unrelated to recent factory changes, and the
> problem is reproducible on plain 13.1 as well, because libtsk is an
> oddball (that took me some looking-into as well).
>
> You can reproduce the issue with the following testcase:
>
> # Makefile.am
> noinst_LTLIBRARIES = libfoo.la
> libfoo_la_SOURCES = x.cpp
> lib_LTLIBRARIES = libbar.la
> libbar_la_SOURCES =
> libbar_la_LIBADD = libfoo.la
>
> # x.cpp
> #include <iostream>
> int anyfunc(void) { std::cout << std::endl; return 0; }
>
>
> The C++ linker frontend (CXXLD; g++) implicitly places -lstdc++ on
> the (raw) linker's command line so that libfoo.so gets properly
> recorded into libfoo.so (if and when built).
>
> However, -lstdc++ never makes it to the static archive's companion
> file (libfoo.la, which sits in to records dependencies because
> archives themselves don't), which is because *the linker is never run
> for them in the first place*.
>
> Therefore, whenever linking in a static archive with C++ things,
> you can get screwed. The workaround is to manually add
>
> libtsk_la_LIBADD = -lstdc++
>
> but it feels really really ugly.
>
> My recommendation? Abolish make recursion in tsk/, abolish
> libtsk[a-z]*.la. Have libtsk.la be directly built from all sources,
> in one go. That also benefits parallel build, because there will
> no longer be a serialization point. In other words,
>
> libtsk_la_SOURCES = base/md5c.c base/mymalloc.c base/sha1c.c ...
> img/img_open.c img/img_types.c ...
> vs/...
>
> Or have the libtsk sublibraries turned into shared libraries too.
> Needs adding libtskimg_la_LIBADD=../base/libtskbase.la and
> similar though.
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
--
To unsubscribe, e-mail: opensuse-buildservice+unsubscribe@opensuse.org
To contact the owner, e-mail: opensuse-buildservice+owner@opensuse.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic