Hey!

I'm the author and maintainer of libgpiod. I'm currently getting ready
to do a new major release. After giving some exposure to the release
candidate, I noticed that when using clang, I can't link against the
C++ bindings, while it works just fine in GCC.

The tree in question is here:
https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/log/

You can trigger the linking program by trying to build the C++ tests
with clang like that:

CC=clang CXX=clang++ ./autogen.sh --enable-bindings-cxx --enable-tests
&& make -j16

You'll get the following error:

/usr/bin/ld: tests-chip.o:(.data+0x0): undefined reference to
`typeinfo for gpiod::chip_closed'
/usr/bin/ld: tests-line-request.o:(.data+0x0): undefined reference to
`typeinfo for gpiod::request_released'
/usr/bin/ld: .libs/gpiod-cxx-test: hidden symbol
`_ZTIN5gpiod11chip_closedE' isn't defined
/usr/bin/ld: final link failed: bad value

The typoinfo is missing for exception types that should be visible to
users of the library.

The culprit is here:
https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/bindings/cxx/gpiod.hpp#n26

I added the GPIOD_CXX_BUILD macro in order to not re-export the
visible symbols if any user of the library would include the gpiod.hpp
header. When the library is being built, the symbols are visible, when
someone includes the header, the symbols are hidden.

If I make the symbols unconditionally visible here, clang starts to
work but I have no idea why and would like to avoid re-exporting the
symbols if I can.

I'm using the following version:
Ubuntu clang version 15.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

Host is: x86_64 GNU/Linux

It's not like gcc links fine but then fails to obtain typeid - I can
catch exceptions coming out from libgpiod just fine in external apps
linked using gcc and see their type.

Any hints?

Thanks
Bart
_______________________________________________
linaro-toolchain mailing list -- linaro-toolchain@lists.linaro.org
To unsubscribe send an email to linaro-toolchain-le...@lists.linaro.org

Reply via email to