GCC는 동적 링크 라이브러리를 구축

리눅스  동적 링크 라이브러리 (공유 객체 파일, 공유 객체 파일) 파일 접미사 .so(링크)로드 할 수있는 특별 대상 파일 (오브젝트 파일)이며, 프로그램 실행으로 들어왔다. 업데이트에 쉽게 프로그램의 실행 파일이 작은 모듈 및 메모리 효율성을 동시에,보다 효율적으로 사용할 수 : 동적 링크 라이브러리를 사용하는 이점이다.

GCC는  동적 링크 라이브러리를 구축

동적 링크 라이브러리를 만들려면, 당신은 GCC를 사용할 수있는 -shared옵션을. 입력 파일은 원본 파일 대상 파일 또는 어셈블리 파일이 될 수 있습니다.

또한 결합했다 -fPIC옵션을. 컴파일 스테이지에인가 -fPIC 옵션 , 위치 독립 코드 (위치 독립 코드)를 생성하도록 컴파일러에게 상기 코드 로더에로드 할 수 있으므로 결과적으로, 생성 된 코드는, 절대 어드레스, 상대 어드레스 모두 사용하지 메모리의 어느 위치, 당신은 실행을 수정할 수 있습니다. 이것은 필요로하는 공유 라이브러리입니다 공유 라이브러리를로드, 메모리의 위치가 고정되지 않는다 .

예를 들어, 소스 파일에서 동적 링크 라이브러리를 생성합니다 :

$ gcc를 -fPIC -shared FUNC.C -o libfunc.so

오브젝트 파일에서 동적 링크 라이브러리를 구축 :

$ GCC -o -fPIC -c FUNC.C func.o
$의 gcc -shared -o func.o libfunc.so

컴파일 단계에 작용하는 -fPIC 옵션은, 당신은 오브젝트 파일을 생성 할 때,이 옵션을 사용할 필요가 코드가 위치 독립적이다 생성 .

GCC 동적 링크 라이브러리는 실행 파일에 링크

실행 파일에 동적 링크 라이브러리를 연결하려면, 특정 소스 파일, 오브젝트 파일의 일반적인 방법으로, 명령 행에 동적 링크 라이브러리의 이름을 나열 할 필요가있다. 다음 예를 살펴 보겠습니다 :

$ gcc가 main.c를 libfunc.so -o app.out

libfunc.so 및 app.out을 main.c에 함께 컴파일 할 때 app.out 실행, 동적 링크 라이브러리로드 libfunc.so.

물론, 우리는 프로그램이 런타임에 동적 링크 라이브러리에서 찾을 수 있는지 확인해야합니다. 당신은 / usr / lib 디렉토리와 같은 표준 디렉토리에 라이브러리를 연결, 또는 LIBRARY_PATH 같은 적절한 환경 변수를 설정할 수 있습니다. 다른 시스템은 링크 라이브러리를로드하는 여러 가지 방법이있다.

추천

출처www.cnblogs.com/Stephen-Qin/p/11813880.html