Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force GCC to static-link e.g. pthreads (and not dynamic link)

My program is built as a loader and many modules which are shared libraries. Now one of those libraries uses pthreads and it seems its bound to the module dynamically (loaded on startup). Now it'd be simplier if i could force pthreads to be linked into the module file. GCC on linux, how do i do? I guess a libpthread.a is necessary....

like image 626
imacake Avatar asked Apr 30 '12 21:04

imacake


1 Answers

While linking libpthread.a into a shared library is theoretically possible, it is a really bad idea. The reason is that libpthread is part of glibc, and all parts of glibc must match exactly, or you'll see strange and un-explainable crashes.

So linking libpthread.a into your shared library will:

  1. Cause your program to crash when moved to a machine with a different version of glibc
  2. Cause your existing program to crash when your current machine's glibc is upgraded, but your module is not re-linked against updated libpthread.a.

Spare yourself aggravation, and don't do that.

like image 189
Employed Russian Avatar answered Oct 05 '22 06:10

Employed Russian