2017-03-15 1 views
0

저는 Unix-machine에서 OpenSSL을 컴파일하고 있습니다. 기본 컴파일러는 GCC-4.4.7입니다. 대체 컴파일러 GCC-5.2.0을 다른 폴더에 넣습니다. 대체로 대체 컴파일러의 경로를 $PATH에 붙이므로 gcc은 항상 대체 경로에서 하나를 사용합니다.라이브러리가 특정 GCC 버전으로 컴파일되었는지 확인하는 방법

그러나 지금 내가 컴파일 한 라이브러리에 대해 확신이 서지 않지만 gcc가 내 라이브러리를 컴파일하는 데 사용되는 방법을 알려줄 수 있습니까? .o 파일의 해결 방법도 좋습니다.

+2

당신이'readelf -p .comment/경로 /로가/yourprogram'주고 당신에게 정보를 원합니까 예를 들어, 여기에 하나의 gcc로 컴파일이 개 재배치 가능한 오브젝트 파일로 만들어 실행하고 그 소리에 다른입니다 ? –

+0

감사합니다 @MarkPlotnick! 이것은 대단하다! 내가 필요한 것! 동의 할 수 있도록 대답으로 변환 해 주시겠습니까? – ZDunker

답변

2

gcc 및 clang 컴파일러 제품군은 버전 문자열을 ELF 파일의 .comment 섹션에 넣습니다. 중간 어셈블리 언어 파일을 생성하는 경우이 문자열을 .ident 지시어로 볼 수 있습니다.

GNU 로더는 입력 파일의 모든 .comment 섹션을 단일 섹션으로 병합하여 중복을 제거합니다.

readelf -p .comment /path/to/your/objectfile을 실행하여이 섹션을 읽을 수 있습니다.

$ readelf -p .comment hello 

String dump of section '.comment': 
    [  0] GCC: (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005 
    [ 2d] clang version 3.8.1-12ubuntu1 (tags/RELEASE_381/final) 
관련 문제