在Linux下用不同的glibc库编译C程序

我有一个基于Linux的防火墙设备,有glibc-2.3.4,并没有gcc编译程序。 当我通过另一台linux机器编译程序时,错误信息是:

需要glibc.xxx

我怎样才能在另一个linux机器上为该版本的glibc编译ac程序?

apbuild-apgcc工具设置了与glibc符号的旧版本的链接。

一般来说,您必须使用适当的建筑环境,其中包含具有所需或兼容版本的所有目标库。 libc变体之间的区别不仅在于链接库名称本身。 例如,所需的配置文件可能有所不同。 一些接口可以提供头版级的内联包装,在版本之间进行变异。 运行一个更新的库版本的二进制文件通常是安全的,但是与旧版本不兼容。

但是,如果您的系统中已经安装了目标libc的开发包,则可以使用-nostdinc和-nostdlib开关(或显式调用链接程序)直接与其构建二进制文件,并明确指定所需的库。 这个例子可以从gcc -v输出中获得。 在我的系统中,它是最终的链接器命令:

 / usr / bin / ld --eh-frame-hdr -V -dynamic-linker /libexec/ld-elf.so.1 \
   -ot /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o \
   -L / usr / lib -L ​​/ usr / lib /tmp//ccCb5j33.o -lgcc --as-needed -lgcc_s \
   - 不需要-lc -lgcc  - 需要-lgcc_s  - 不需要的\
   /usr/lib/crtend.o /usr/lib/crtn.o

根据目标libc细节,您应该将其中一些说明替换为另一个。 尤其是,启动(crt1.o和crti.o),清理(crtend.o,crtn.o),libc本身(显式路径代替-lc)将被替换; 可选地,同样应该满足动态链接器。

PS我看到这是太旧的问题,但它已被重新编辑刚刚:)