我有一个基于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我看到这是太旧的问题,但它已被重新编辑刚刚:)