2010-12-31 2 views
1

최근에 gcc 내부를 지나는 데 시간을 많이 보냈습니다. gcc가 우리 프로그램에 대한 지원을 제공하는 라이브러리 모음을 찾았습니다.gcc 라이브러리 혼동 ​​

libgcc (GCC 런타임 라이브러리)의 용도는 무엇입니까? 그 라이브러리에서 가장 일반적으로 사용되는 기능은 무엇입니까? :/

그리고 라이브러리가 있다는 것을 발견했습니다. libiberty. 나는 도서관이 alloca, concatcalloc을 포함하여 일반적으로 사용되는 함수 (내가 사용하는 루틴을 의미 함)를 많이 사용하고 있음을 발견했습니다. 그러나 나는 malloc과 같은 문자열 루틴과 비슷한 함수를 찾을 수 없었다. 따라서 <string.h> 또는 <alloc.h>을 포함하면 헤더 파일이 두 개의 다른 라이브러리와 연결됩니다.

내 개념 are not 좋은 enogh. :(제발 도와주세요 ..

답변

1

libgcc에는 하드웨어의 "제한 사항"을 해결하는 보조 기능이 있습니다. 예를 들어, 64 비트 정수 나누기는 x86 (_32)에서 libgcc의 일부로 악명 높은 __udivdi3입니다.

+0

+1은'__udiv *'함수를 언급하는데 glibc는 두 함수의 실제 차이점을 구현하지 않기 때문에. – ismail

+0

실제로 libc에는'lldiv'가 있습니다. 실제로 libcso.ini에서 libgcc.a의 div * 함수 (기호 __divdi3 @ GLIBC_2.0'와 같은 기호)의 흔적을 찾습니다. – user502515

0

당신은 당신의 프로그램에서 사용할 수있는 함수의 구현으로 생각할 수 있습니다. 예를 들어 : 'printf'함수를 사용하지만 실제로 간단히 말하자면, 라이브러리는 일반적으로 사용되는 코드 (또는 함수)의 구현 모음입니다.

프로그램을 컴파일하고 링크 할 때 링크 옵션에 따라 프로그램이 링크됩니다 (정적 또는 동적) 라이브러리

라이브러리에 대한 자세한 내용과 더 나은 이해를 위해 정적 및 동적 링크에 대해 읽어보십시오.

는 예를 취할 수 있습니다 : 우리는 sqrt 기능을 사용하는이 코드에서

#include <stdio.h> 
#include <math.h> // contains deceleration of sqrt function 

int main() 
{ 
printf ("sqaure root of 4 is %d.", sqrt (4)); 
} 

,하지만 우리는 그것을 구현되지 않습니다. sqrt 함수 (수학 라이브러리)의 정의를 포함하는 라이브러리를 컴파일하고 링크하면 런타임시 코드가 제대로 작동합니다.

그러나 수학 라이브러리에 연결하지 않으려면 sqrt를 계산하기 위해 고유 한 함수를 작성해야합니다. 실행하여

컴파일 및 링크 수학 라이브러리 :

여기
gcc file.c -lm 

, -l (또는 수학) 라이브러리 우리가 -lm은 'm'을 링크 알려주는 라이브러리를 링크려고하고 있다는 것을 언급에 사용됩니다 .

자세한 내용은 링커에 대해 읽어보십시오.

+0

그래도 링크가 런타임에 실행되면 libgcc lib와 libcpp 라이브러리 사이의 차이점은 무엇입니까 ?? gcc의 런타임 환경은 모든 라이브러리를 검색하여 선언 된 함수의 구현을 찾습니다. – letsc