Linux:对于任何c++程序来说,实际上需要多少足够的gcc共享库?

pqwbnv8z  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(133)

我用自己的双手构建了gcc工具链(x64),我在lib 64中有一组gcc共享库:

  • libasan.so
  • liblsan.so
  • libtsan.so
  • libubsan.so
  • libatomic.so
  • libcc1.so
  • libgcc_s.so
  • libgomp.so
  • libitm.so
  • libquadmath.so
  • libssp.so
  • libstdc++.so

我用ldd研究了这个工具链构建的大多数c++二进制文件。他们中没有人不使用像libcc 1或libubsan或libtsan等库。

我的问题很简单:对于任何将部署在客户机上的c++程序,需要什么足够的gcc运行时库集?

PS
我的问题是:我们有非常非常具体的Linux发行版,有自己的DE,甚至有一些专有组件。在这个发行版非常旧的gcc版本中,我们不能使用刚刚安装在这个系统中的现代gcc工具链-因为这会导致许多内置程序甚至X Server崩溃(因为我们的程序和他们的程序都使用libstdc++.so.6(wout postfix次要版本))。另外,这个发行版内部有完整性控制-所以任何外来的二进制文件都会定期从任何系统目录(如lib 64,bin等)中删除。
所以.为了部署我们的c程序,我们强制在二进制文件附近携带c运行时库(现代版的gcc),并将RUNPATH硬编码到每个二进制文件中。

ikfrs5lh

ikfrs5lh1#

“绝对适用于任何C程序”是一个相当高的标准。我相信你可以编写C程序来实现这些功能。除了libcc1.so,它是GDB的插件。
但是让我们看看典型的程序可能需要什么:

libasan.so
liblsan.so
libtsan.so
libubsan.so

X(地址,UB,...)消毒剂。如果你不编译与消毒剂,不需要。

libatomic.so

原子支持,某些程序可能需要

libcc1.so

GDB插件,运行程序本身不需要

libgcc_s.so

一些低级别的支持材料(例如,32位上的长长除法),保持

libgomp.so

OpenMP,如果你需要这个,你会知道的。

libitm.so

transmittance内存支持。除非你要用这个,否则不需要

libquadmath.so

Quad math(双精度以上)。可能不需要。

libssp.so

堆栈保护器。可能需要的。

libstdc++.so

必需的.

相关问题