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 파일과 출력에서 gcc와 함께 사용했습니다 -O2
.-g
기존의질문, 보았지만 도움이되지 않았습니다.
현재 Ubuntu 15.04를 사용하고 있지만 데비안이 아닌 다른 시스템에서도 사용해야 합니다. 또한 Ubuntu 14.04의 elibc와도 작동해야 합니다.
궁극적인 목표는 다양한 시스템에서 사용되는 모든 버전의 glibc를 재현(컴파일)하고(많은 시스템이 있다는 것을 알고 있습니다) 그 버전에서 IDA PRO FLIRT 서명을 생성하는 것입니다. 따라서 전체적으로 최소한 동일한 바이너리 출력 libc.a
(서명된 파일)이 필요합니다. 추가 읽기 FLIRT 서명여기.
이러한 서명의 문제점은 각기 다른 컴파일러 버전과 각 컴파일러 옵션이 라이브러리 아카이브의 출력을 변경하고 분석된 바이너리에 부분적으로만 적용되는 다른 서명으로 이어질 수 있다는 것입니다.
나는 이것에 대해 매우 새로운 것이므로 어떤 도움이라도 환영합니다. 제가 중요한 것을 언급하는 것을 잊지 않았으면 좋겠습니다.
답변1
여러분의 패키지와 일치하는 src.deb 패키지에서 다시 빌드하는 데 필요한 모든 것을 찾아야 합니다 .deb
. 보다 apt-src(8)
.