[Debian-med-packaging] Bug#835416: imagevis3d: FTBFS: singleton.hpp:131: undefined reference to `boost::serialization::singleton_module::is_locked()'

Tom Fogal tfogal at sci.utah.edu
Thu Sep 22 17:13:19 UTC 2016


Hi, thanks for looking into this.

On 09/20/2016 02:45 AM, peter green wrote:
>> 1. It's failing in the doc/genlua stuff, which is an internal tool meant
>> to generate documentation that is currently unfinished.  Arguably it
>> should be removed from source releases anyway.  So a simple fix is for
>> debian to just remove this directory from SUBDIRS in TuvokSubdirs.pro.
>
> I don't see a file called TuvokSubdirs.pro , I guess you mean 
> Tuvok/Tuvok.pro ?

Ahh, this must just be an older version, mea culpa.  Yeah, IIRC it would
be there.

> Anyway I removed doc/genlua from SUBDIRS in Tuvok/Tuvok.pro and tried a 
> build in raspbian stretch.
> 
> Unfortunately it failed with
> 
> g++ -fopenmp -Wl,-z,relro -o ../Build/ImageVis3D 
[snip]
> ../Tuvok/Build/libTuvok.a(SysTools.o): In function 
> `SysTools::GetTempDirectory(std::__cxx11::basic_string<char, 
> std::char_traits<char>, std::allocator<char> >&)':
> ./Tuvok/Basics/SysTools.cpp:1060: warning: the use of `tmpnam' is 
> dangerous, better use `mkstemp'
> ../Build/objects/ImageVis3D_WindowHandling.o: In function 
> `boost::serialization::singleton<tuvok::MasterController>::get_mutable_instance()':
> /usr/include/boost/serialization/singleton.hpp:131: undefined reference 
> to `boost::serialization::singleton_module::is_locked()'

Yes, this is the same issue that was causing 'genlua' to fail; looks
like simply removing that code wasn't a great workaround.  Sorry.

I dug a bit deeper, by downloading boost 1.61 and verifying that,
indeed, the singleton.hpp included there is NOT a header-only library,
yet the one included in Tuvok's 3rdParty directory IS a header-only library.

Looking closer at the build log, I note that it is missing many of the
-I options that upstream has.  Notably in this case:
-IIO/3rdParty/boost.  This in turn causes it to use the system copy of
boost, which has changed behavior to require a new link option.

I can think of a number of solutions:

  * build-dep require a similar version of boost on the system.  I
    can confirm 1.58 is fine.  Note that the runtime is irrelevant
    since IV3D restricts itself to header-only parts of boost.

  * don't hack out the -I flags from upstream so that IV3D uses its
    internal copy of boost.

  * edit the .pro files to force this to link against
    libboost_serialization.so.



More information about the Debian-med-packaging mailing list