정적 리눅스 GCC 및 동적 컴파일 컴파일

정적으로 컴파일

기존의 샘플을 컴파일 :

$ gcc가 xxx.c yyy.c zzz.c -o RSLT

 참고 : GCC 컴파일러 소스 파일 min.c는 사전 처리 컴파일하며, 최종 실행 파일을 링크

$ gcc가 -c xxx.c yyy.c zzz.c 

 참고 : GCC 컴파일러 소스 파일 min.c 사전 처리, 컴파일, 링크 마지막 세대가 아닙니다 오브젝트 파일을 (대상 파일)

 

예를 링크 :

$ 아칸소 R과 libstack.a stack.o push.o pop.o is_empty.o

정적 라이브러리에 아칸소 꽉 찬 역할에서, tar 명령과 유사한 명령하지만, 대상 파일은 tar 명령을 사용하는 대신 ar 명령을 사용할 수 있습니다. R 옵션은이 파일이 이미 새로운 대체 패키지 파일에 존재하는 경우 패키지가, 그것을 만드는 존재하지 않는 경우는, 파일 패키지의 목록에 추가 할 것이라고 말했다. 정적 라이브러리의 생성에 전용되는, 인덱스를 생성하기 위해 정적 라이브러리로 표현이 지수는 링커를 사용한다. 정적 라이브러리에 대한 인덱스를 생성 할 수 있습니다 ranlib가 명령은 위의 명령은 동일합니다 :

$ 아칸소의 r은 libstack.a stack.o push.o pop.o is_empty.o

$ ranlib은 libstack.a

마지막 링크 정적 라이브러리 데모 편집 :

$ GCC의 main.c의 -L. -lstack -Istack -o 주

기호 표시 : -I 헤더 파일 디렉토리를 -L -l 라이브러리 카탈로그 링크 라이브러리 이름을

동적 링크와 정적 라이브러리 우선 순위 설명 :에 대한 링크가있는 경우에 대한 링크가있는 경우, 정적 라이브러리 libstack.a이없는 찾을 수없는 경우 컴파일러는 첫째, libstack.so에는 공유 라이브러리를 찾을해야합니다. 당신 만이 정적 라이브러리를 연결하는 컴파일러를 원하는 경우에 따라서 컴파일러는 우선 순위 공유 라이브러리는, 당신은 -static 옵션을 지정할 수 있습니다.

동적 컴파일

공유 라이브러리 오브젝트 파일의 구성 및 파일 -fPIC과 같은 - 공유 옵션을 추가하는 컴파일시에, 일반적으로 다른 객체 :

$ gcc를 -fPIC -shared testa.c testb.c testc.c -o libtest.so  

 

는 PIC는 하나, 위치 독립적 인 코드 (위치 독립적 인 코드)를 생성 나타냅니다 어떤 컴파일러와 뒤에 -F 옵션을 선택합니다.

-shared이 옵션은 연결할 수 없습니다 외부 부호없이, 동적 링크 라이브러리 (때로는 수출 기호의 약한 연결 W 유형을 생성, T 형 커넥터 수출 심볼 테이블을 생성하게) 생성을 지정합니다. 실행 파일에 해당합니다
-fPIC는 : 위치 독립적 인 코드로 컴파일이 옵션이 코드의 사본의 방법으로 다른 프로세스의 요구를 충족하기 위해 동적으로로드 된 위치와 관련이없는 경우 코드를 컴파일하지만, 도달 할 수없는 표현 된 코드 조각을 공유하는 진정한 목적.

마지막으로, 컴파일 시간 데모 동적 링크 라이브러리를, 같은 연결 정적 라이브러리를 :

$ GCC의 main.c의 -L. -lstack -Istack -o 주

당신이 * .so를 메인 실행 시간을 찾을 수없는 경우, 연결 라이브러리를 볼 수 ldd 명령을 사용합니다.

동적 라이브러리 디렉토리 검색 우선 순위 :

   우리는 순서대로 두 단계를 거쳐야 컴파일 추가 및 링크 부하, 메모리에 프로그램을 실행하는 것을 알고있다. 물론 리눅스 동적 링크는이 세 가지 과정을 통해입니다. 리눅스는 다른 라이브러리에 (사실,이 그냥 링크입니다)을로드하려면이 ld-linux.so의 *에서 사용합니다. 따라서이 라이브러리는 리눅스 / lib 디렉토리 아래에 위치해야합니다. 다른 사람을 위해, 우리는 일반적으로이 경로 LIB은 /에서 공유 라이브러리뿐만 아니라 기본 검색 경로.
리눅스를 위해 라이브러리 검색 경로를 공유하는
오브젝트 코드를 동적 라이브러리 검색 경로를 컴파일 할 때 지정 1 : -Wl 컴파일시 -rpath = 경로 지정
(2), 환경 변수 LD_LIBRARY_PATH 동적 라이브러리 검색 경로 지정
(3), 구성 파일 / 등 / ld.so.conf가 지정된 동적 라이브러리 검색 경로
4, 기본 동적 라이브러리 검색 경로 / lib에
. 오, 기본 동적 라이브러리 검색 경로는 / usr / lib 디렉토리

= 수출 LD_LIBRARY_PATH :이 일시적으로 명령을 설정합니다.  

 

 

추천

출처www.cnblogs.com/dingz/p/11578178.html