GNOME Bugzilla – Bug 431145
gnome-pilot libraries are not linking to required libraries
Last modified: 2007-04-24 14:46:20 UTC
Forwarding this from a downstream bug report: http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198211 libgnomepilotd, libgnomepilotdconduit, and libgpilotdcm do not link to their required libraries as specified by the Makefile variable GNOME_PILOT_LIBS. To reproduce (in an RPM-based distribution): $ rpm -ql gnome-pilot-devel | grep lib.*so | xargs ldd -r | grep missing A partial solution to this problem was offered in bug #360190 under the pretense of making --as-needed work, although the problem is more severe than that. Even with the following patch applied, there's still a few outliers: $ rpm -ql gnome-pilot-devel | grep lib.*so | xargs ldd -r | grep missing undefined symbol: gnome_pilot_conduit_sync_type_int_to_str (/usr/lib/libgpilotdcm.so) undefined symbol: gnome_pilot_conduit_sync_type_str_to_int (/usr/lib/libgpilotdcm.so) undefined symbol: gnome_pilot_conduit_set_name (/usr/lib/libgpilotdcm.so) I suspect this to be related to the build-order problem between libgpilotdCM and gpilotd, as mentioned in the README file.
Created attachment 86602 [details] [review] Proposed patch
Actually, the last part of the reproducer should really be "> /dev/null" and not "grep missing". End result is the same.
Thanks for this report, and patch. I'll take a look (blow the dust off those parts of the build scripts...). Matthew, I presume your supplied patch is the one you apply in gnome-pilot-2.0.15-5.fc7. I may get time to look at this this weekend... watch this space.
(In reply to comment #3) > Matthew, I presume your supplied patch is the one you apply in > gnome-pilot-2.0.15-5.fc7. Correct.
*** Bug 431144 has been marked as a duplicate of this bug. ***
Fixed in svn. It's a bit of a hack job, as a proper fix would have taken me further than I was willing to go into the gpilotd build structure... The problem was that libgpilotdcm gets built first, and it was calling two functions that get built in the gpilotd/ directory. libgpilotdcm is needed for the gpilotd and gpilotd-control-applet executables, but they get built in gpilotd/, which is why libgpilotdcm needs to be built first. Ugly. To work around this I've duplicated a small amount of code, avoiding the creation of the dependency. I don't know why it was felt that libgpilotdcm needed to be in a separate library; a neater solution to this issue would have been to have merged it with libgpilotdconduit (or to have built all the libraries in one directory, and built the executables after that).
With the recent fix applied, I'm still getting one undefined symbol: $ rpm -ql gnome-pilot-devel | grep lib.*so | xargs ldd -r > /dev/null undefined symbol: gnome_pilot_conduit_set_name (/usr/lib/libgpilotdcm.so) Reopening just to get this last bugger fixed.
Also, in conduits/*/Makefile.am where you add -lgpilotdconduit to LIBADD, I think you want this instead: libxxx_conduit_la_LIBADD = \ $(GNOME_PILOT_LIBS) \ $(top_builddir)/gpilotd/libgpilotdconduit.la otherwise it looks for an already-installed libgpilotdconduit.
Thanks for the testing Matthew. I know I had the _set_name call fixed, possibly I overlooked committing one file... Reopening.
Should be fixed now.
Indeed it is. Thanks!