我用自己的双手构建了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硬编码到每个二进制文件中。
1条答案
按热度按时间ikfrs5lh1#
“绝对适用于任何C程序”是一个相当高的标准。我相信你可以编写C程序来实现这些功能。除了libcc1.so,它是GDB的插件。
但是让我们看看典型的程序可能需要什么:
X(地址,UB,...)消毒剂。如果你不编译与消毒剂,不需要。
原子支持,某些程序可能需要
GDB插件,运行程序本身不需要
一些低级别的支持材料(例如,32位上的长长除法),保持
OpenMP,如果你需要这个,你会知道的。
transmittance内存支持。除非你要用这个,否则不需要
Quad math(双精度以上)。可能不需要。
堆栈保护器。可能需要的。
必需的.