Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sdk中获取静态库?_Sdk_Static Libraries_Yocto - Fatal编程技术网

如何在sdk中获取静态库?

如何在sdk中获取静态库?,sdk,static-libraries,yocto,Sdk,Static Libraries,Yocto,搜索如何在SDK中包含静态库的每个人都一定读过。我尝试了他们的建议,但没有成功 阅读yocto mega手册2.1版(yocto morty),我在第5.9.12章中发现。(Poky引用分布更改),他们添加了DISABLE_静态变量,以禁用静态库的生成。我尝试将此添加到我的配方中,但无法将静态库添加到SDK: DISABLE_STATIC = "" 在构建映像时,我可以在sysroot中看到库。但它并没有进入SDK 那么,我需要做什么才能在SDK中获得静态库和头文件呢 有效的方法是将stat

搜索如何在SDK中包含静态库的每个人都一定读过。我尝试了他们的建议,但没有成功

阅读yocto mega手册2.1版(yocto morty),我在第5.9.12章中发现。(Poky引用分布更改),他们添加了DISABLE_静态变量,以禁用静态库的生成。我尝试将此添加到我的配方中,但无法将静态库添加到SDK:

DISABLE_STATIC = ""
在构建映像时,我可以在sysroot中看到库。但它并没有进入SDK

那么,我需要做什么才能在SDK中获得静态库和头文件呢


有效的方法是将staticdev包添加到
local.conf
中的“IMAGE\u INSTALL”,但我不想这样做


我创建了一个示例配方,它演示了我的问题。目录结构如下所示:

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
示例-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 $@ lib.o 

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

如何准确地修改配方,以便在SDK中获得静态库?

遵循您添加的示例

将以下行添加到图像配方中(或添加到
.bbappend
,例如
核心图像minimal.bbappend

应该对你有用。运行
bitbake core image minimal-c populate_SDK
后,将在SDK中提供
.a
文件。(再次假设使用的图像是
核心图像最小值

您将
.a
文件添加到
${PN}-dev
的实验没有成功,这是由于文件放入包的顺序造成的。顺序是
${PN}-dbg${PN}-staticdev${PN}-dev${PN}-doc${PN}-locale${PACKAGE}u-BEFORE{PN}${PN}
。因此,不管怎样,
.a
文件将被放入
${PN}-staticdev
,因为包是在
{PN}-dev
之前处理的


注意,您将这一行,
TOOLCHAIN\u TARGET\u TASK+=“example staticlib staticdev”
添加到映像配方中,因此,您需要编写包名,而不是
PN

我尝试了一种不需要编辑图像配方的方法

示例-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"
安装之后。我没有使用工具链\u目标\u任务

文件${PN}-staticdev+=“${libdir}/libexample.a”

RDEPENDS_${PN}-dev+=“${PN}-staticdev”


BBCLASSEXTEND=“native nativesdk”

是的,删除您的两行代码。
.a
文件由
${PN}-staticdev
包自动拾取。请参阅我添加的注释。请参阅我在最后一条注释之前在回答中添加的内容。您需要将工具链变量n添加到图像配方的顶部。那么,如何准确地修改配方呢?我认为这是可能的,因为其他库(例如libarchive)正在sdk.Ok中获取它们的静态库。只需要第二个工具链目标任务。您需要将该行移到您的图像配方中,例如
core image minimal.bb
。Ie配方本身不会影响添加到SDK或图像中的内容。