2017-03-28 2 views
1

정적 라이브러리를 SDK에 포함시키는 방법을 모색 한 사람은 모두 this thread from 2014이어야합니다. 나는 그들이 제안한 것을 시도했지만, 효과가 없었다.sdk에서 정적 라이브러리를 얻는 방법은 무엇입니까?

yocto mega manual 버전 2.1 (yocto morty)을 읽으면서, 5.9.12 장을 읽었습니다. (Poky Reference Distribution Changes), DISABLE_STATIC 변수를 추가하여 정적 라이브러리 생성을 비활성화했습니다. 나는 나의 조리법이 추가 시도, 그리고 SDK에 정적 라이브러리를 추가 사용하지 않았다 이미지를 구축 할 때

DISABLE_STATIC = "" 

내가 SYSROOT에서 라이브러리를 볼 수 있습니다. 그러나 SDK에 포함되지 않습니다.

그렇다면 SDK의 정적 라이브러리와 헤더를 얻으려면 정확히 무엇이 필요합니까? local.conf에 'IMAGE_INSTALL'에 staticdev 패키지를 추가했다,하지만 난 그렇게하고 싶지 않아 무엇


.


나는 내 문제를 보여주는 예제 레시피를 만들었습니다. 디렉토리 구조는 다음과 같다 :

example-staticlib/ 
example-staticlib/example-staticlib_0.1.bb 
example-staticlib/files/ 
example-staticlib/files/lib.c 
example-staticlib/files/lib.h 
example-staticlib/files/Makefile 

example-staticlib_0.1.bb :

DESCRIPTION = "example stared library" 
LICENSE = "LGPLv2" 
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/LGPL-2.0;md5=9427b8ccf5cf3df47c29110424c9641a" 

SRC_URI = "file://lib.c \ 
      file://lib.h \ 
      file://Makefile" 

PR = "r0" 
S = "${WORKDIR}" 

ALLOW_EMPTY_${PN} = "1" 

do_install() { 
    oe_runmake install DEST=${D} 
} 

TOOLCHAIN_TARGET_TASK += "example-staticlib-dev" 
TOOLCHAIN_TARGET_TASK += "example-staticlib-staticdev" 

lib.c :

int foo() 
{ 
    return 42; 
} 

lib.h :

int foo(); 

메이크 파일 :

TARGET=libexample.a 

all:$(TARGET) 

install : 
    @install -d $(DEST)/usr/lib/ 
    @install -m 0644 $(TARGET) $(DEST)/usr/lib/ 
    @install -d $(DEST)/usr/include/ 
    @install -m 0644 lib.h $(DEST)/usr/include/ 

$(TARGET) : lib.c 
    $(CC) -c lib.c -o lib.o 
    $(AR) rcs [email protected] lib.o 

clean: 
    rm -rf lib.o $(TARGET) 

SDK에서 정적 라이브러리를 얻으려면 정확히 어떻게 레시피를 수정해야하나요?

답변

1

추가 된 예를 따르십시오.

당신을 위해 작동합니다 이미지 조리법 (또는에 .bbappend, 예를 들어 core-image-minimal.bbappend)

TOOLCHAIN_TARGET_TASK += "example-staticlib-staticdev" 

에 다음 행을 추가. 그러면 bitbake core-image-minimal -c populate_sdk을 실행 한 후 SDK에 .a 파일이 생깁니다. (다시 사용 된 이미지가 core-image-minimal이라고 가정).

.a 파일을 ${PN}-dev에 추가하는 실험이 효과적이지 않은 경우 파일을 패키지에 넣는 순서와 관련이 있습니다. 주문은 ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}입니다. 따라서 .a 파일은 ${PN}-staticdev에 저장되며 그 패키지는 {PN}-dev보다 먼저 처리됩니다.

참고,이 행은 이미지 레시피에 TOOLCHAIN_TARGET_TASK += "example-staticlib-staticdev"을 추가하므로 PN 대신 패키지 이름을 작성해야합니다.

+0

네, 두 줄을 제거하십시오. '.a' 파일은'$ {PN} -staticdev' 패키지에 의해 자동으로 선택됩니다. – Anders

+0

추가 된 쪽지보기. – Anders

+0

내가 마지막으로 대답하기 전에 내 대답에 무엇을 추가했는지 살펴보십시오. 툴체인 변수 n을 이미지 레서피 위에 추가해야합니다. – Anders

관련 문제