强制GCC静态链接,例如pthreads(而不是动态链接)

ima*_*ake 6 linux linker gcc shared-libraries static-libraries

我的程序是作为加载器和许多模块构建的,它们是共享库.现在其中一个库使用pthreads,它似乎动态绑定到模块(在启动时加载).现在,如果我可以强制将pthreads链接到模块文件中,那就更简单了.关于linux的GCC,我该怎么办?我想libpthread.a是必要的....

Emp*_*ian 18

虽然libpthread.a理论上可以链接到共享库,但这是一个非常糟糕的主意.原因是它libpthread的一部分glibc,并且所有部分glibc 必须完全匹配,否则您将看到奇怪且无法解释的崩溃.

因此,链接libpthread.a到您的共享库将:

  1. 导致程序在移动到具有不同版本的计算机时崩溃 glibc
  2. 导致当前计算机glibc在升级当前计算机时崩溃,但您的模块未重新链接以更新libpthread.a.

免除恶化,不要那样做.

  • @Kiran你错了`libc!= GLIBC`.`GLIBC`(包)包含`libc`,`libpthread`,`librt`,`libcrypt`,`libresolv`(个别文件)等等.并非所有这些程序都链接到每个程序. (2认同)