대상 파일 을 통 해 동적 라 이브 러 리 자동 생 성

2302 단어 shellmakefileg++
동적 라 이브 러 리 생 성 에는 여러 가지 방식 이 있 습 니 다.
(1) 원본 파일 을 직접 컴 파일 하여 대상 파일 을 통 해 g + 또는 gcc 명령 으로 동적 라 이브 러 리 를 생 성 합 니 다.
(2) 기 존의 정적 라 이브 러 리 를 분리 한 후에 포장 하면 동적 라 이브 러 리 를 생 성 할 수 있다.
(3) 기 존의 정적 라 이브 러 리 를 연결 하여 동적 라 이브 러 리 생 성;
이해 분석:
(2), (3) 기 존의 정적 라 이브 러 리 가 필요 합 니 다.(2) 흩 어 지고 포장 하 는 과정 은 간단 하지만 정적 라 이브 러 리 는 여러 개의 모듈 이 있 습 니 다. 서로 다른 모듈 에 같은 이름 의 파일 이 존재 할 수 있 습 니 다. 흩 어 진 후에 인터페이스 가 손실 될 수 있 습 니 다. (하나의 키 모듈 A. o 가 다른 키 모듈 A. o 를 덮어 씁 니 다) 또한 정적 라 이브 러 리 는 링크 의 기호 로 호출 과정 에서 덮어 씁 니 다.재 접속 을 분산 시 키 면 매우 많은 정의 되 지 않 은 문제 와 C + 재 업로드 로 인 한 C 에서 기 호 를 찾 지 못 하 는 등 문제 가 발생 할 수 있 습 니 다.또한 (3) 는 비교적 빠 른 방식 으로 원본 파일 의 주 함 수 를 따로 써 서 정적 라 이브 러 리 의 입구 함 수 를 호출 하고 입구 가 정적 라 이브 러 리 에 필요 한 모든 기능 모듈 로 이동 할 수 있 도록 해 야 한다. 그러면 동적 라 이브 러 리 를 사용 할 때 일부 기능 이 연결 되 지 않 은 것 을 발견 할 수 있다.
현재 여전히 표준 방법 을 채택 하고 있다.
컴 파일 로 생 성 된 대상 파일 과 링크 가 필요 한 시스템 라 이브 러 리, porting 라 이브 러 리 를 이용 하여 동적 라 이브 러 리 를 생 성 합 니 다.
기본 명령:
(1) gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 
(2) 복잡 한 Makefile 호출 을 통 해 생 성 할 동적 라 이브 러 리 이름, 의존 하 는 라 이브 러 리, 모든. o 를 입력 합 니 다. 서류 면 됩 니 다.
Compile. rules 파일 은 다음 과 같 습 니 다.
LINK:= $(CROSS)-g++
export CROSS:=arm-linux-androideabi

define MMCP_SHARED_LIBRARY
  $(LINK) -nostdlib \
     -Wl,-shared,-Bsymbolic \
     -Wl,-soname,$(notdir $@)\
     -Wl,--start-group \
     $(Bestwin_Hi3716C_Static_Lib) \
     -ldl -llog -lz -lutils -lcutils -lnetutils -lporting \
     $(LDFLAGS) \
     $(INPUTSSO) \
     $^\
     -Wl,--end-group \
     -Wl,--whole-archive  -Wl,--no-whole-archive \
     -Wl,--no-undefined -Wl,-z,noexecstack \
     -Wl,[email protected]\
     -o $@;  \
     cp -rfv $@ $@_notstrip;\
     $(CROSS)-strip -S $@;

CCompile. rules 파일 은 다음 과 같 습 니 다.
$(DLL_EXPORT): $(OBJECTS_C) $(OBJECTS_CXX) $(INPUTS) 
        @echo Building $@
        $(MMCP_SHARED_LIBRARY)

설명 OBJECTSC,OBJECTS_CXX 는 각각 c, c++ 파일 의 대상 파일 이 Compile. rules 에 전달 되 는 것 은 파일 에 의존 하 는 것 입 니 다 $^,
그리고 DLLEXPORT 는 모듈 디 렉 터 리 에서 동적 라 이브 러 리 이름 을 먼저 Makefile 로 정의 합 니 다. rules 는 $@ 입 니 다.
모듈 디 렉 터 리 의 Makefile
include CCompile.rules
include Compile.rules
정의 DLLEXPORT, SOURCES, INPUTSOSO 면 됩 니 다.
다음 편 은 이 작업 을 수행 하기 위해 Makefile 을 스 크 립 트 로 직접 설정 합 니 다.

좋은 웹페이지 즐겨찾기