I did more testing, and I still don't really understand what's happening.  The 
closest info I have on this is 
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460, but the `g++`call made by 
libtool still seem pretty much the same:

<details><summary><strong>Failing</strong> one on Buster:</summary>

`g++  -fPIC -DPIC -shared -nostdlib 
/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o 
/usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o  .libs/libgeany_la-about.o 
.libs/libgeany_la-build.o .libs/libgeany_la-callbacks.o 
.libs/libgeany_la-dialogs.o .libs/libgeany_la-document.o 
.libs/libgeany_la-editor.o .libs/libgeany_la-encodings.o 
.libs/libgeany_la-filetypes.o .libs/libgeany_la-geanyentryaction.o 
.libs/libgeany_la-geanymenubuttonaction.o .libs/libgeany_la-geanyobject.o 
.libs/libgeany_la-geanywraplabel.o .libs/libgeany_la-highlighting.o 
.libs/libgeany_la-keybindings.o .libs/libgeany_la-keyfile.o 
.libs/libgeany_la-log.o .libs/libgeany_la-libmain.o 
.libs/libgeany_la-msgwindow.o .libs/libgeany_la-navqueue.o 
.libs/libgeany_la-notebook.o .libs/libgeany_la-plugins.o 
.libs/libgeany_la-pluginutils.o .libs/libgeany_la-prefs.o 
.libs/libgeany_la-printing.o .libs/libgeany_la-project.o 
.libs/libgeany_la-sciwrappers.o .libs/libgeany_la-search.o 
.libs/libgeany_la-socket.o .libs/libgeany_la-spawn.o .libs/libgeany_la-stash.o 
.libs/libgeany_la-symbols.o .libs/libgeany_la-templates.o 
.libs/libgeany_la-toolbar.o .libs/libgeany_la-tools.o 
.libs/libgeany_la-sidebar.o .libs/libgeany_la-ui_utils.o 
.libs/libgeany_la-utils.o .libs/libgeany_la-vte.o  -Wl,--whole-archive 
../scintilla/.libs/liblexilla.a ../scintilla/.libs/libscintilla.a 
./tagmanager/.libs/libtagmanager.a -Wl,--no-whole-archive  -lgtk-3 -lgdk-3 
-lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 
-lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 
-L/usr/lib/gcc/x86_64-linux-gnu/8 
-L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu 
-L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu 
-L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib 
-L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lstdc++ -lm -lc -lgcc_s 
/usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o 
/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o  -O2 
-Wl,--as-needed -Wl,-z -Wl,defs -pthread -pthread   -pthread -Wl,-soname 
-Wl,libgeany.so.0 -o .libs/libgeany.so.0.0.0`
</details>

<details><summary><strong>Working</strong> one Bullseye:</summary>

`g++  -fPIC -DPIC -shared -nostdlib 
/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crti.o 
/usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o  .libs/libgeany_la-about.o 
.libs/libgeany_la-build.o .libs/libgeany_la-callbacks.o 
.libs/libgeany_la-dialogs.o .libs/libgeany_la-document.o 
.libs/libgeany_la-editor.o .libs/libgeany_la-encodings.o 
.libs/libgeany_la-filetypes.o .libs/libgeany_la-geanyentryaction.o 
.libs/libgeany_la-geanymenubuttonaction.o .libs/libgeany_la-geanyobject.o 
.libs/libgeany_la-geanywraplabel.o .libs/libgeany_la-highlighting.o 
.libs/libgeany_la-keybindings.o .libs/libgeany_la-keyfile.o 
.libs/libgeany_la-log.o .libs/libgeany_la-libmain.o 
.libs/libgeany_la-msgwindow.o .libs/libgeany_la-navqueue.o 
.libs/libgeany_la-notebook.o .libs/libgeany_la-plugins.o 
.libs/libgeany_la-pluginutils.o .libs/libgeany_la-prefs.o 
.libs/libgeany_la-printing.o .libs/libgeany_la-project.o 
.libs/libgeany_la-sciwrappers.o .libs/libgeany_la-search.o 
.libs/libgeany_la-socket.o .libs/libgeany_la-spawn.o .libs/libgeany_la-stash.o 
.libs/libgeany_la-symbols.o .libs/libgeany_la-templates.o 
.libs/libgeany_la-toolbar.o .libs/libgeany_la-tools.o 
.libs/libgeany_la-sidebar.o .libs/libgeany_la-ui_utils.o 
.libs/libgeany_la-utils.o .libs/libgeany_la-vte.o  -Wl,--whole-archive 
../scintilla/.libs/liblexilla.a ../scintilla/.libs/libscintilla.a 
./tagmanager/.libs/libtagmanager.a -Wl,--no-whole-archive  -lgtk-3 -lgdk-3 -lz 
-lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo 
-lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 
-L/usr/lib/gcc/x86_64-linux-gnu/12 
-L/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu 
-L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib -L/lib/x86_64-linux-gnu 
-L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib 
-L/usr/lib/gcc/x86_64-linux-gnu/12/../../.. -lstdc++ -lm -lc -lgcc_s 
/usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o 
/usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/crtn.o  -O2 
-Wl,--as-needed -Wl,-z -Wl,defs   -pthread -Wl,-soname -Wl,libgeany.so.0 -o 
.libs/libgeany.so.0.0.0`
</details>

To reproduce a test program, you need to build a shared library using C++ 
threads with libtool. In this case, you'll get the `-nostdlib` and friends, and 
get a link failure unless you pass in `-lpthread` on my GCC8.  This is 
regardless of the Libtool version it seems (well, 2.4.6 and 2.4.7). I made such 
a sample test program: https://github.com/b4n/ltcxxthread

---

Insight I'm taking from this:
* this only happens with shared libraries (otherwise libtool doesn't play with 
`-nostdlib` and it seems to work)
* because of this, it's tricky to test at configure time whether a workaround 
is needed or not
* seems to either be a libtool or gcc bug (but it *seems* like it's fixed by a 
newer GCC, not a newer libtool -- or it could be a change in the used threading 
or stdlib implementations?)

In the end, I don't know if this here is OK or not.  FWIW, the sample program 
does *not* seem to link to libpthread, yet it works.  If I add `-lpthread` it 
then does link to it -- obviously.  However, Geany links to libpthread anyway 
through GLib -- at least on GNU/Linux.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany/pull/3888#issuecomment-2143849479
You are receiving this because you are subscribed to this thread.

Message ID: <geany/geany/pull/3888/[email protected]>

Reply via email to