linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so
@ 2024-10-30 16:49 Boerge Struempfel
  2024-11-04  9:38 ` Bartosz Golaszewski
  0 siblings, 1 reply; 6+ messages in thread
From: Boerge Struempfel @ 2024-10-30 16:49 UTC (permalink / raw)
  To: linux-gpio, Bartosz Golaszewski; +Cc: Boerge Struempfel, Boerge Struempfel

When crosscompiling, the linker isn't finding libpgiod.so while linking
the manager to libgpiod-glib.so.

In order to fix this issue, we manually force the linker to look in
the corresponding folder for needed shared libraries, when building the
manager.

Signed-off-by: Boerge Struempfel <boerge.struempfel@gmail.com>
---
 dbus/manager/Makefile.am | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dbus/manager/Makefile.am b/dbus/manager/Makefile.am
index d1cef8e..32c9e30 100644
--- a/dbus/manager/Makefile.am
+++ b/dbus/manager/Makefile.am
@@ -9,6 +9,7 @@ AM_CFLAGS += -DG_LOG_DOMAIN=\"gpio-manager\"
 AM_CFLAGS += $(PROFILING_CFLAGS)
 AM_LDFLAGS = $(GLIB_LIBS) $(GIO_LIBS) $(GIO_UNIX_LIBS) $(GUDEV_LIBS)
 AM_LDFLAGS += $(PROFILING_LDFLAGS)
+AM_LDFLAGS += -Wl,-rpath,$(top_builddir)/lib/.libs
 LDADD = $(top_builddir)/bindings/glib/libgpiod-glib.la
 LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so
  2024-10-30 16:49 [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so Boerge Struempfel
@ 2024-11-04  9:38 ` Bartosz Golaszewski
  2024-11-04 11:18   ` Börge Strümpfel
  0 siblings, 1 reply; 6+ messages in thread
From: Bartosz Golaszewski @ 2024-11-04  9:38 UTC (permalink / raw)
  To: Boerge Struempfel; +Cc: linux-gpio, Bartosz Golaszewski, Boerge Struempfel

On Wed, Oct 30, 2024 at 5:49 PM Boerge Struempfel
<boerge.struempfel@gmail.com> wrote:
>
> When crosscompiling, the linker isn't finding libpgiod.so while linking
> the manager to libgpiod-glib.so.
>
> In order to fix this issue, we manually force the linker to look in
> the corresponding folder for needed shared libraries, when building the
> manager.
>
> Signed-off-by: Boerge Struempfel <boerge.struempfel@gmail.com>
> ---
>  dbus/manager/Makefile.am | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/dbus/manager/Makefile.am b/dbus/manager/Makefile.am
> index d1cef8e..32c9e30 100644
> --- a/dbus/manager/Makefile.am
> +++ b/dbus/manager/Makefile.am
> @@ -9,6 +9,7 @@ AM_CFLAGS += -DG_LOG_DOMAIN=\"gpio-manager\"
>  AM_CFLAGS += $(PROFILING_CFLAGS)
>  AM_LDFLAGS = $(GLIB_LIBS) $(GIO_LIBS) $(GIO_UNIX_LIBS) $(GUDEV_LIBS)
>  AM_LDFLAGS += $(PROFILING_LDFLAGS)
> +AM_LDFLAGS += -Wl,-rpath,$(top_builddir)/lib/.libs
>  LDADD = $(top_builddir)/bindings/glib/libgpiod-glib.la
>  LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la
>
> --
> 2.43.0
>
>

Can you give me more info on your environment? I'm cross-compiling
just fine and the:

LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la

bit should be enough for linking.

Bart

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so
  2024-11-04  9:38 ` Bartosz Golaszewski
@ 2024-11-04 11:18   ` Börge Strümpfel
  2025-02-05 23:46     ` Börge Strümpfel
  0 siblings, 1 reply; 6+ messages in thread
From: Börge Strümpfel @ 2024-11-04 11:18 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio, Bartosz Golaszewski, Boerge Struempfel

Hi Bart,

thank you for your reply.

you are in fact correct and the LDADD is enough. There seems to be an
issue with the sdk I was using. After manually crosscompiling using a
different sdk, I no longer get the error that libgpiod.so can not be
found by the linker.

The sdk with which I got the error was generated using buildroot version
2024.01. However the error does not occur on the current buildroot
master version. Therefore you can ignore this patch.

Kind Regards,
Boerge

On Mon, Nov 4, 2024 at 10:39 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>
> On Wed, Oct 30, 2024 at 5:49 PM Boerge Struempfel
> <boerge.struempfel@gmail.com> wrote:
> >
> > When crosscompiling, the linker isn't finding libpgiod.so while linking
> > the manager to libgpiod-glib.so.
> >
> > In order to fix this issue, we manually force the linker to look in
> > the corresponding folder for needed shared libraries, when building the
> > manager.
> >
> > Signed-off-by: Boerge Struempfel <boerge.struempfel@gmail.com>
> > ---
> >  dbus/manager/Makefile.am | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/dbus/manager/Makefile.am b/dbus/manager/Makefile.am
> > index d1cef8e..32c9e30 100644
> > --- a/dbus/manager/Makefile.am
> > +++ b/dbus/manager/Makefile.am
> > @@ -9,6 +9,7 @@ AM_CFLAGS += -DG_LOG_DOMAIN=\"gpio-manager\"
> >  AM_CFLAGS += $(PROFILING_CFLAGS)
> >  AM_LDFLAGS = $(GLIB_LIBS) $(GIO_LIBS) $(GIO_UNIX_LIBS) $(GUDEV_LIBS)
> >  AM_LDFLAGS += $(PROFILING_LDFLAGS)
> > +AM_LDFLAGS += -Wl,-rpath,$(top_builddir)/lib/.libs
> >  LDADD = $(top_builddir)/bindings/glib/libgpiod-glib.la
> >  LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la
> >
> > --
> > 2.43.0
> >
> >
>
> Can you give me more info on your environment? I'm cross-compiling
> just fine and the:
>
> LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la
>
> bit should be enough for linking.
>
> Bart

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so
  2024-11-04 11:18   ` Börge Strümpfel
@ 2025-02-05 23:46     ` Börge Strümpfel
  2025-02-06  8:48       ` Bartosz Golaszewski
  0 siblings, 1 reply; 6+ messages in thread
From: Börge Strümpfel @ 2025-02-05 23:46 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio, Bartosz Golaszewski, Boerge Struempfel

Hi Bart,

While preparing a patch to add gpio-manager to mainline Buildroot, I
encountered this issue again. That is, I can successfully compile the
gpio-manager manually (using autotools/gcc/ld provided by ubuntu 2024) however,
when using the Buildroot infrastructure, I get a compiler error, stating that
the libgpiod.so.3 cannot be found.

After further investigation, I'm increasingly unsure on how the
libgpiod.so.3 is supposed to be found by the linker in the first place:

From what I see, gpio-manager depends on:
- bindings/glib/libgpiod-glib
- dbus/lib/libgpiodbus
- lib/libgpiod

However, I see no direct reference in dbus/manager/Makefile.am, nor can I see
an indirect reference via the Makefile.am files used to generate:
- bindings/glib/libgpiod-glib.la
- dbus/lib/libgpiodbus.la

Am I missing something obvious?

Furthermore upon review, I believe the solution I proposed last October was
flawed - I should have used:
LDADD += $(top_builddir)/lib/libgpiod.la
instead of directly modifying the linker via:
AM_LDFLAGS += -Wl,-rpath,$(top_builddir)/lib/.libs

Kind regards,
Boerge Struempfel

On Mon, Nov 4, 2024 at 12:18 PM Börge Strümpfel
<boerge.struempfel@gmail.com> wrote:
>
> Hi Bart,
>
> thank you for your reply.
>
> you are in fact correct and the LDADD is enough. There seems to be an
> issue with the sdk I was using. After manually crosscompiling using a
> different sdk, I no longer get the error that libgpiod.so can not be
> found by the linker.
>
> The sdk with which I got the error was generated using buildroot version
> 2024.01. However the error does not occur on the current buildroot
> master version. Therefore you can ignore this patch.
>
> Kind Regards,
> Boerge
>
> On Mon, Nov 4, 2024 at 10:39 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >
> > On Wed, Oct 30, 2024 at 5:49 PM Boerge Struempfel
> > <boerge.struempfel@gmail.com> wrote:
> > >
> > > When crosscompiling, the linker isn't finding libpgiod.so while linking
> > > the manager to libgpiod-glib.so.
> > >
> > > In order to fix this issue, we manually force the linker to look in
> > > the corresponding folder for needed shared libraries, when building the
> > > manager.
> > >
> > > Signed-off-by: Boerge Struempfel <boerge.struempfel@gmail.com>
> > > ---
> > >  dbus/manager/Makefile.am | 1 +
> > >  1 file changed, 1 insertion(+)
> > >
> > > diff --git a/dbus/manager/Makefile.am b/dbus/manager/Makefile.am
> > > index d1cef8e..32c9e30 100644
> > > --- a/dbus/manager/Makefile.am
> > > +++ b/dbus/manager/Makefile.am
> > > @@ -9,6 +9,7 @@ AM_CFLAGS += -DG_LOG_DOMAIN=\"gpio-manager\"
> > >  AM_CFLAGS += $(PROFILING_CFLAGS)
> > >  AM_LDFLAGS = $(GLIB_LIBS) $(GIO_LIBS) $(GIO_UNIX_LIBS) $(GUDEV_LIBS)
> > >  AM_LDFLAGS += $(PROFILING_LDFLAGS)
> > > +AM_LDFLAGS += -Wl,-rpath,$(top_builddir)/lib/.libs
> > >  LDADD = $(top_builddir)/bindings/glib/libgpiod-glib.la
> > >  LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la
> > >
> > > --
> > > 2.43.0
> > >
> > >
> >
> > Can you give me more info on your environment? I'm cross-compiling
> > just fine and the:
> >
> > LDADD += $(top_builddir)/dbus/lib/libgpiodbus.la
> >
> > bit should be enough for linking.
> >
> > Bart

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so
  2025-02-05 23:46     ` Börge Strümpfel
@ 2025-02-06  8:48       ` Bartosz Golaszewski
  2025-02-07 15:45         ` Börge Strümpfel
  0 siblings, 1 reply; 6+ messages in thread
From: Bartosz Golaszewski @ 2025-02-06  8:48 UTC (permalink / raw)
  To: Börge Strümpfel
  Cc: linux-gpio, Bartosz Golaszewski, Boerge Struempfel

On Thu, Feb 6, 2025 at 12:46 AM Börge Strümpfel
<boerge.struempfel@gmail.com> wrote:
>
> Hi Bart,
>
> While preparing a patch to add gpio-manager to mainline Buildroot, I
> encountered this issue again. That is, I can successfully compile the
> gpio-manager manually (using autotools/gcc/ld provided by ubuntu 2024) however,
> when using the Buildroot infrastructure, I get a compiler error, stating that
> the libgpiod.so.3 cannot be found.
>
> After further investigation, I'm increasingly unsure on how the
> libgpiod.so.3 is supposed to be found by the linker in the first place:
>
> From what I see, gpio-manager depends on:
> - bindings/glib/libgpiod-glib
> - dbus/lib/libgpiodbus

Correct.

> - lib/libgpiod

This one is an indirect dependency, it's already pulled in by libgpiod-glib.so.

>
> However, I see no direct reference in dbus/manager/Makefile.am, nor can I see
> an indirect reference via the Makefile.am files used to generate:
> - bindings/glib/libgpiod-glib.la
> - dbus/lib/libgpiodbus.la
>
> Am I missing something obvious?
>

These are generated in different directories, the Makefiles in there
take care of this.

> Furthermore upon review, I believe the solution I proposed last October was
> flawed - I should have used:
> LDADD += $(top_builddir)/lib/libgpiod.la

On Ubuntu, I see that gpio-manager is only linked against
libgpiod-glib.so and libgpiodbus.so. However if I cross-compile on
yocto, it's linked against libgpiod.so as well. I don't know exactly
what the differences in linker setup are but yocto is able to find
libgpiod without problems. Before we add an unnecessary flag, may I
suggest looking into how yocto does the linking?

Bart

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so
  2025-02-06  8:48       ` Bartosz Golaszewski
@ 2025-02-07 15:45         ` Börge Strümpfel
  0 siblings, 0 replies; 6+ messages in thread
From: Börge Strümpfel @ 2025-02-07 15:45 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio, Bartosz Golaszewski, Boerge Struempfel

Hi Bart,

On Thu, Feb 6, 2025 at 9:48 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>
> On Thu, Feb 6, 2025 at 12:46 AM Börge Strümpfel
> <boerge.struempfel@gmail.com> wrote:
> >
> > Hi Bart,
> >
> > While preparing a patch to add gpio-manager to mainline Buildroot, I
> > encountered this issue again. That is, I can successfully compile the
> > gpio-manager manually (using autotools/gcc/ld provided by ubuntu 2024) however,
> > when using the Buildroot infrastructure, I get a compiler error, stating that
> > the libgpiod.so.3 cannot be found.
> >
> > After further investigation, I'm increasingly unsure on how the
> > libgpiod.so.3 is supposed to be found by the linker in the first place:
> >
> > From what I see, gpio-manager depends on:
> > - bindings/glib/libgpiod-glib
> > - dbus/lib/libgpiodbus
>
> Correct.
>
> > - lib/libgpiod
>
> This one is an indirect dependency, it's already pulled in by libgpiod-glib.so.
>

Yes. You are right - there are no direct calls into the libgpiod
library only via
libgpiod-glib.so. I also verified that the libgpiod is properly build and linked
against the libgpiod.so.

> >
> > However, I see no direct reference in dbus/manager/Makefile.am, nor can I see
> > an indirect reference via the Makefile.am files used to generate:
> > - bindings/glib/libgpiod-glib.la
> > - dbus/lib/libgpiodbus.la
> >
> > Am I missing something obvious?
> >
>
> These are generated in different directories, the Makefiles in there
> take care of this.
>
> > Furthermore upon review, I believe the solution I proposed last October was
> > flawed - I should have used:
> > LDADD += $(top_builddir)/lib/libgpiod.la
>
> On Ubuntu, I see that gpio-manager is only linked against
> libgpiod-glib.so and libgpiodbus.so. However if I cross-compile on
> yocto, it's linked against libgpiod.so as well. I don't know exactly
> what the differences in linker setup are but yocto is able to find
> libgpiod without problems. Before we add an unnecessary flag, may I
> suggest looking into how yocto does the linking?

Here is what I have figured out so far:
 - whether libgpiod.so is linked to the final execuatble seems to be
at least partially
   dependent    on the version of autotools and/or libtools. (Tested
by backporting
   yocto's autotools and libtools)
 - there is a fix in the yocto recipe for finding the libgpiod.so bit
it conserns only
   gobject introspection, which is not the problem I am facing with buildroot
 - The behaviour of the problem I am facing in buildroot does not depend on
   gobject introspection as far as I can tell, since the error happens
independent
   of it. (which is good in my understanding, since it is what I would expect)
  - there is a flag in the libtool "link_all_deplibs" which yocto sets
to "unknown" and
    which in buildroot is set to "no" after the configure step (I
couldn't figure out the
    reason for this yet) If I manually tweek this value in buildroot
between the configure
    and build steps, the gpio-manager is build successfully (with or
without an explicit
    link to libgpiod.so depending on the version of libtools used).
However setting
    this flag to "no" in yocto, still leads to a successful build.
Therefore I don't think,
    this is the root-cause of this problem.

By now I fully agree with you, that gpio-manager should not get libgpiod.so as
a dependency even if I don't know yet where this error is coming from.

Kind Regards, and thanks for your support,
Boerge

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-02-07 15:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-30 16:49 [libgpiod][PATCH 1/1] dbus: manager: fix linker not finding libgpiod.so Boerge Struempfel
2024-11-04  9:38 ` Bartosz Golaszewski
2024-11-04 11:18   ` Börge Strümpfel
2025-02-05 23:46     ` Börge Strümpfel
2025-02-06  8:48       ` Bartosz Golaszewski
2025-02-07 15:45         ` Börge Strümpfel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).