我想找出在安装Linux时使用哪些编译器/链接器选项来编译GNU C标准库(glibc).特别是我希望在不同的机器上从源代码编译glibc时获得与归档libc.a相同的结果(相同版本的gcc,make,binutils等).
所有我能找到的是使用过的gcc版本:
user@ubuntu:/$/lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Ubuntu GLIBC 2.21-0ubuntu4) stable release version 2.21,
...
Compiled by GNU CC version 4.9.2.
...
但是当从源代码编译glibc而没有其他选项时,我在运行make后得不到相同的结果.自编译的libc.a存档与预安装的存档(大小和二进制)不同.所以我猜有一些优化正在进行中.可能是因为从源代码编译时包含的调试信息.
建立:
user@ubuntu:~/glibc$sudo apt-get source libc6
user@ubuntu:~/glibc/glibc-build$sudo ../glibc-2.21/configure --prefix=/home/user/glibc/glibc-install/
...
sudo make
...
在debian / rules文件和我发现的输出中,-O2和-g与gcc一起使用.
有一个现有的question,我看了,但没有帮助我.
我目前正在使用Ubuntu 15.04,但我也需要在其他(非debian)系统上使用它.此外,它也应该与Ubuntu 14.04上的eglibc一起使用.
最终目标是重现(编译)在不同系统上使用的每个glibc版本(我知道很多)并从中获取IDA PRO FLIRT签名.因此,总的来说,至少对于libc.a我需要相同的二进制输出(这是签名的文件).进一步阅读FLIRT签名here.
这些签名的问题在于,每个不同的编译器版本和每个编译器选项都可以更改库归档的输出,并导致不同的签名,该签名仅部分用于分析的二进制文件.
我是新手,所以欢迎每一个帮助.我希望我不忘记提到一些重要的事情.
解决方法:
您应该在与.deb包匹配的src.deb包中找到重建所需的所有内容.看看apt-src(8).