2017-03-25 1 views
3

는 그래서, 내가 링크 된 라이브러리를보고 싶어
int main() {return 0;}
prova.c, 간단한 C 프로그램을 작성 :왜 일부 라이브러리를 열지 못했습니다?

  • 내가 gcc -m32 -Wl,--verbose prova.o -o prova 그것을 연결 gcc -Wall -m32 -stdc=99 -c prova.c -o prova.o
  • 로 컴파일

이제 나는 표준 출력을 조사 할 때 일부 라이브러리를 열지 못했습니다.
왜 이런 일이 발생합니까? 왜 그들이 열려고 한거야? 왜 실패합니까?

attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o succeeded 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crti.o succeeded 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crti.o 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/crtbegin.o succeeded 
/usr/lib/gcc/x86_64-linux-gnu/4.8/32/crtbegin.o 
attempt to open prova.o succeeded 
prova.o 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.so failed 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.a succeeded 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc_s.so succeeded 
+0

"왜 열어 보지 않으면 링크되어 있습니까?" 그들은 그렇지 않습니다. '-lgcc'를 볼 때 링커는 libgcc.so를 만족 시키려고 시도하는데 실패하면 libgcc.a를 다음에 시도합니다. –

+0

@MarcGlisse 이것은 답변이되어야합니다. – yugr

+0

안녕하세요, 도와 줘서 고마워요! 질문을 편집하여 질문 할 내용이 더 분명해졌습니다. 내가 물었던 quesiton은 분명하지 않았다. –

답변

2

당신 컴파일 명령은 컴파일러 드라이버에 의해 추가 된 그림자 -lgcc -lc 접미사를 가지고 있습니다. 이 플래그는 링커에게 libgcc 및 libc가 어디에서 발견되는지 정확하게 알려주지 않으며 정적이거나 공유되어야하는지 여부도 지정하지 않습니다. 따라서 링커는 다양한 디렉토리 (컴파일러에서 -L 또는 링커 스크립트를 통해 전달됨)에서 반복적으로 찾으려고 시도합니다. 기본적으로 링커는 라이브러리의 공유 버전 (.so)과 정적 버전 (.a)을 먼저 연결하려고합니다.

attempt to open ... failed 경고는 실제 오류는 아니지만 링커에서 필요한 libs 검색 진행 상황에 대한 진단 메시지입니다.

관련 문제