2017-01-12 2 views
0

libc.so와 링크를 원한다고해도 제 질문은 libc.a가 항상 필요합니다. 나는 인터넷을 검색하며 (충돌) 3 가능한 대답간단한 c 프로그램이 libc.a가 아닌 libc.so에 링크되는 이유는 무엇입니까?

1. c program will require to link to libc.a and crt1.o files 
2. for "-l" option, ".so" is preferred against ".a" 
3. There're both libc.a and libc.so 

가 그래서 내 질문에 대한 정확한 답해야을 제공합니다?

+0

정적으로 링크 할 경우 정적 라이브러리가 필요합니다. –

+1

어디서이 세 가지 답변을 얻었습니까? –

+0

오직 동적으로 링크 된 경우 어떤 코드가 동적 연결을 수행합니까? – stark

답변

2

libc.a가 아닌 libc.a와 연결하려면 특별한 작업을 수행 할 필요가 없습니다. 이것이 기본값입니다.

첫 번째 대답은 구식이며 대부분의 일반적인 Linux 배포에는 적용되지 않습니다. 기본적으로 C 프로그램은 libc.so가 필요하지만 libc.a는 필요로하지 않습니다.

두 번째 대답은 기본적으로 정확합니다. 이 기본 설정을 변경하려면 -static과 같은 링커 플래그를 제공해야합니다. 이 대답은 libc뿐만 아니라 모든 라이브러리에 적용됩니다.

세 번째 대답은 대부분의 Linux 배포판에서 올 바릅니다.

GNU libc (대부분의 Linux 배포판과 함께 제공됨)의 경우 libc.a와 실행 파일을 정적으로 연결하는 것은 권장되지 않으며 작동하지 않을 수 있습니다. 그것은 가능하지만 당신이하고있는 일을 정확히 알고 어떤 농구를 뛰어 넘을 필요가 있습니다. 그렇지 않으면 당신의 실행 파일은 여전히 ​​libc.so에 의존 할 것입니다.

다른 버전의 libc는 더 정적 링크가 가능합니다.

관련 문제