[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [ardour-dev] ardour



>It's about ardour, a Ardour is a multichannel hard disk recorder (HDR)
>and digital audio workstation (DAW) [http://ardour.sourceforge.net/]. An
>ITP was filed a while ago [http://bugs.debian.org/95870].  It is quite
>big, written in C++, making heavy use of jack, ladspa, midi, rt. =20
>
>Way back last year, Mandrake distributed a C++ library compiled
>with options, that caused ardour not to be compilable and/or showing
>strange behaviour, strange bugs...=20

This was not the only reason. Similar breakage occurs as soon as the
user acquires a C++ library in binary format that was compiled by a
g++ with either different options and/or a different ABI compared the
one used to compile and link the application. If someone upgrades from
g++ 2.95 to g++ 3.2, for example, and they fail to recompile *every*
C++ library on their system, problems will arise sooner or later
(depending on how many C++ apps they run and how they were built).

>Users complained they were not able to compile ardour because of these
>libraries and C++'s ABI instability.

They were able to compile things. If they could not have done this,
life would have been easier. Instead, they compiled them, and then
things didn't work.

>So Paul Davis (upstream) decided to include all C++ libraries except
>libstdc++ (I don't understand that exception) in the CVS tree. Namely

libstdc++ is currently distributed with g++. as a result, the
libstdc++ that you link against is more or less always compiled by the
same version of g++ used to compile the C++ program.

>libgtk-canvas, libgtkmm, libsigc++, libart. They are built along with
>ardour, compiled as static objects and linked statically.  The other C++
>libraries (libpbd, libmidi++, libgtkmmext, libardour) belong to ardour
>and are in the CVS anyway. The libraries having to do with GUI
>(libgtk-canvas, libgtkmm, libart, libgtkmmext) are statically linked
>into the ardour executable, the others are statically linked together
>into libardour (libpbd, libmidi++, libardour, libsigc++) which itself is
>shared.

this is not quite correct. libardour is the only one built as a shared
library. all others are statically linked into the final
exectuable. the shared library is just a development convenience - its
where the most significant changes happen and avoiding a static relink
every time that library changes its internals saves a considerable
amount of time.

>That makes the build process overly long and the binaries and the
>library overly large.

It also makes them stable and immune to compiler version SNAFUs.

>e) introduce a system to check the libraries for their correct
>   compilation flags at runtime (I have no idea how to do that)

this also needs to check the ABI of the compiler used. a library built
by g++ 3.2 cannot be used with g++ 2.95, for example.

--p



Reply to: