Compile C program in Linux with different glibc library

折月煮酒 提交于 2020-01-24 11:26:44

问题


I have a firewall appliance base on linux that have glibc-2.3.4, and have not gcc to compile a program for that. when I compile a program by another linux machine, error message says:

require glibc.x.x.x

How can I compile a c program in another linux machine for that version of glibc?


回答1:


Generally you have to use the proper building environment which contains all target libraries with the needed or compatible versions. The difference between libc variants is not only in linked library name itself. For example, required configuration files can differ. Some interfaces can be provided with header-level inline wrappers which mutated between versions. It's generally safe to run a binary with a newer library version, but not with an older one.

But, if you have a development package of the target libc installed additionally to your system, you could build a binary directly with it using -nostdinc and -nostdlib switches (or call a linker explicitly), and specifying required libraries explicitly. The example could be got from gcc -v output. From my system, it's final linker command:

/usr/bin/ld --eh-frame-hdr -V -dynamic-linker /libexec/ld-elf.so.1 \
  -o t /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 \
  --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed \
  /usr/lib/crtend.o /usr/lib/crtn.o

Depending on target libc specifics, you should replace some of these instructions to another ones. Especially, startup (crt1.o and crti.o), cleanup (crtend.o, crtn.o), the libc itself (explicit path instead of -lc) shall be replaced; optionally, the same should meet dynamic linker.

P.S. I see this is too old question but it has been reedited just now:)




回答2:


The apbuild-apgcc tool sets things up to link against older versions of the glibc symbols.



来源:https://stackoverflow.com/questions/3487128/compile-c-program-in-linux-with-different-glibc-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!