1

라이브러리 연결에 대한 몇 가지 질문이 있습니다.정적 및 동적 연결 라이브러리

링크하려는 라이브러리가 정적 또는 동적으로 링크되어 있다면 링커가 어떻게 결정합니까? 파일 확장 (.a/ .so)으로 결정 되었습니까?

동적으로 .a 라이브러리를 연결할 수 있습니까?

소스가 없어도 .a 라이브러리를 .so 라이브러리로 변환 할 수 있습니까?

+3

예, 아니요, 아니요. 일반적으로 공유 라이브러리로 사용할 수 있도록 * position-independent * 코드를 컴파일해야합니다. 이것은 명시 적으로 요청하지 않는 한 일반적으로 수행되지 않습니다. –

+0

@KerrekSB 그게 대답이 아니어야합니까? – delnan

답변

1
  1. 링커는 일반적으로 확장을보고 라이브러리를 연결하는 방법을 결정하지만 이는 링커에 달려 있습니다. AIX 링커에는 다소 이국적인 동작이 있습니다. 또한 .so와 .so 버전의 라이브러리가 같은 위치에있는 경우 명령 줄 스위치를 사용하여 링커에서 사용하는 명령 줄을 결정합니다.
  2. 정렬 방법. .a 파일을 .so 파일에 연결할 수는 있지만 성능 문제가 발생할 수 있습니다. 공유 라이브러리는 최상의 성능을 위해 위치 독립적 코드로 빌드해야합니다. 그리고 코드에 따라 링커는 재배치 정보를 패치 할 수 없기 때문에 링크를 거부 할 수 있습니다. 그러나 링커에게 .a를 .so로 취급하도록 말할 수는 없습니다.
  3. 위와 같을 수도 있습니다.
0

gcc 링커는 두 가지 유형의 라이브러리가 검색 경로에서 발견되면 기본적으로 .so 파일에 동적으로 연결됩니다. here에 설명 된대로 명령 줄 인수를 사용하여이를 오버 라이딩 할 수 있습니다.

관련 문제