동적 라이브러리에 쿠사이 정적

목적 : 소스 코드와 사업과 libalog.a이로 포장 libimp.a libaudioplug.so 내부 이동합니다.

요약 : libalog.a 파일 libimp.a 순서는 ibaudioplug.so 당신이 소스 코드를 컴파일 할 때 모든 libalog.a 시간 libimp.a 사업을 컴파일해야합니다, 내부 이동으로 포장한다

결합 세에, -fPIC을 사용합니다.

    동적 라이브러리 libimp.so libalog.so의 사용에 달성하기 위해, 도망 연결할 수, 실행 시간, 세 라이브러리 libalog.so libimp.so libaudioplug.so해야합니다.

-------------------------------------------------- 실험 뒤에 ------------------------------ ---------------- -------------------------------------------
    1)
    JZ_STATIC_LIBS : = $ ( JZ_SDK_PATH) /lib/uclibc/libimp.a $ (JZ_SDK_PATH)는 /lib/uclibc/libalog.a
    lib 디렉토리 : $ (PLUG_SRC)
        MIPS-은 GNU - 리눅스와 uClibc-G ++ -fPIC는 $ ^ $ (JZ_STATIC_LIBS) $ (INC_PATH를 -shared ) -o libaudioplug.so
    
    오류 :

    /home/yp/toolchains/T20_toolchain/mips-gcc472-glibc216-32bit/bin/../lib/gcc/mips-linux-gnu/4.7.2/../../../../mips- 리눅스 GNU / 빈 / LD : ./jz_lib/MergeBaseMove.co :
    공유 객체를 만들 때 '로컬 기호'에 대한 재배치 R_MIPS_HI16 사용할 수 없습니다; -fPIC으로 컴파일
    ./jz_lib/MergeBaseMove.co : 오류 추가 문자 : 잘못된 값
    collect2을 : 오류 : LD가 반환 한 종료 상태
    메이크 : 32 : 'LIB'실패한 대상에 대한 조리법
    메이크업 : *** [LIB] 오류 1


    2)
    그럼 내가 정적 라이브러리 .o 인 파일로 연결 아칸소 사용, 다시 시도
    
    = ./jz_lib/*.o : JZ_LIB_OBJ    
    
    JZ_STATIC_LIBS : $ (JZ_SDK_PATH) /lib/uclibc/libimp.a = $ (JZ_SDK_PATH)을 / lib 디렉토리 / uClibc가 / libalog.a
    lib 디렉토리 : $ (PLUG_SRC)
        -o libaudioplug.so MIPS-는 GNU - 리눅스와 uClibc-G ++ -fPIC가 -shared $ ^ $ (JZ_LIB_OBJ) $ (INC_PATH)는
        
    같은 실수를보고했다.
    
    3)
    나는 그것을 시도
    $ (PLUG_SRC) : LIB
        MIPS-는 GNU - 리눅스와 uClibc-G ++ -fPIC -shared $ (JZ_LIB_OBJ) $ ^ $ (INC_PATH) -o libaudioplug.so
        
    같은 허위 진술을.    

    
    4)
    나는 또한 그것을 시도
    lib 디렉토리 : $ (PLUG_SRC)
        MIPS-은 GNU - 리눅스와 uClibc-G ++ -fPIC -shared $ (JZ_STATIC_LIBS) $ ^ $ (INC_PATH) -o libaudioplug.so
        
    컴파일을하고 내가 가지고 이 DLL을 사용하기 시작, 결과는 JZ_STATIC_LIBS 실수에이 함수를 호출합니다.
    
    5)
    나는이 정적 라이브러리도 전에 컴파일을 추가하지 마십시오, 가서 그것을 시도. 프로그램 또는 세그먼트 오류 실행
    lib 디렉토리 : $ (PLUG_SRC)
        MIPS-은 GNU - 리눅스와 uClibc-G ++ -fPIC을 - 공유 $ ^ $ (INC_PATH) -o libaudioplug.so
        
    6)
    나는 그들이 그것을 시도, 내가 추가하지 마십시오 이 정적 라이브러리는, 사용시, 컴파일, 정적 라이브러리를 추가하고 다른했다됩니다. 프로그램이나 다른 실수를 실행합니다.
    lib 디렉토리 : $ (PLUG_SRC)
        MIPS-은 GNU - 리눅스와 uClibc-G ++ -fPIC가 -shared $ ^ $ (INC_PATH) -o libaudioplug.so
        
        
    7) 나는 그것을 시도하고 원래 정적 라이브러리 사용으로 대체됩니다 DLL 테스트 프로그램을 경험했다 컴파일. 완성.
        
        
    lib 디렉토리 : $ (PLUG_SRC)
        MIPS-리눅스와 uClibc - gnu- g ++ -fPIC -shared $ ^ -limp -lalog $ (LIB_PATH) $ (INC_PATH는) -o libaudioplug.so
        
    
        
        
    동적 라이브러리 정적 라이브러리를 얻기 위해 자신의 어머니를 것, 그것은 어려운 아입니다.    
    
    
요약 :이 문제가 컴파일 순서 인 컴파일러 옵션 문제가있다.
    정적 라이브러리는 순차적 인 문제 사이의 컴파일 문제의 순서 후, 내가 탐구하고 싶지 않은 사실, 호출합니다.
    컴파일러 옵션 문제는이 옵션은 모든 .o 만 추가되어야 할 때 발생하는 것입니다, -fPIC, 그래서 당신은 동적 라이브러리 쿠사이에 정적을 넣을 수 있습니다.
    왕 라이브러리를 사용하지 않기 때문에 -fPIC 그래서 쿠사이 내부 동적 라이브러리 정적 실현하지
 

추천

출처blog.csdn.net/qq_16810885/article/details/94036214