Thank you, IOhannes, for spotting all this! Roman
On Fre, 2017-07-07 at 10:57 +0200, IOhannes m zmölnig wrote: > On 07/07/2017 12:50 AM, Roman Haefeli wrote: > > > > > > > > > > > > > When I start: > > > > > > > > $ pd -jack -channels 2 > > > > > > > > It segfaults. > > there's actually two issues we discovered. > - on some systems, the Pd binary ends up not being dynamically linked > against libjack (even though "-ljack" is passed to the linker) > - if this is the case, Pd segfaults when the jack backend is > selected. > > > > > > > Just to sum it up for others reading this. This issue appears on > > Ubuntu > > 16.04 and (according to a #dataflow user) on Gentoo. I had a shared > > SSH > > session with IOhannes and he investigated the problem. I might be > > not > > be able to fully explain what he found out, but it is related to > > weak > > linking and the way the the compiler that comes with Ubuntu 16.04 > > handles it. > the issue is, that jack.h declares all symbols as "weak" symbols (so > they might be missing) from the actually used dynamic library and Pd > can > still load. > if the linker has the "--as-needed" flag (which is enabled by default > on > Ubuntu-16.04LTS), the linker will only link against a dynamic library > if > the application uses at least one non-weak symbol. > since all symbols in jack.h are declared as weak, the linker simply > removes the dependeny on libjack, and sets all function pointers to > NULL. > > foremost, this explains why Pd is crashing in this case: Pd has been > compiled with USEAPI_JACK, but then the "jack_client_open" function > is > really just a NULL-pointer. > there is already a check for this in place, to just fail the request > to > open a jack device (since on OSX we have weak linking by default), > but > unfortunately this is only active on OSX, thus making it crash on > e.g. > linux. > > there's a pull-request [93] on github to fix the crash. > > > > > > IOhannes proposed to add the '-Wl,--no-as-needed' linker > > flag like this: > > > > $ ./configure --enable-jack LDFLAGS="-Wl,--no-as-needed" > > > this is a hack for the other problem. > > for the record: i consider this a workaround for systems were the > linker > defaults to stripping unused libraries ("--as-needed"). > > I don't think that Pd is the actual culprit here, and I'm currently > investigating whether the problem is with libjack or with gcc. > > esp. i'm (currently) pretty convinced that "--no-as-needed" should > *not* > be added by Pd's build system by default. > > msdt > IOhannes > > > [93] https://github.com/pure-data/pure-data/pull/93 > > _______________________________________________ > Pd-dev mailing list > Pd-dev@lists.iem.at > https://lists.puredata.info/listinfo/pd-dev
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Pd-dev mailing list Pd-dev@lists.iem.at https://lists.puredata.info/listinfo/pd-dev