Yocto为静态库构建失败,并显示错误“找不到匹配项”

时间:2019-07-02 03:58:13

标签: linux embedded-linux libraries yocto

我正在尝试在为静态库编写的图像中包含Yocto食谱。

  1. 在我自己的图层中创建了recipes-test / static文件夹。
  2. 在此文件夹中创建了“ static_0.1.bb”文件
  3. 在“ recipes-test / static”文件夹中创建的“文件”文件夹
  4. 复制了以下文件。

hello.c

char * hello (void)
{
  return "Hello";
}

world.c

char *world(void)
{
  return "World";
}

helloworld.h

#ifndef HELLOWORLD_H
#define HELLOWORLD_H
char * hello (void);
char * world (void);
#endif
  1. 创建的配方具有以下内容:

DESCRIPTION =“简单的helloworld示例静态库”     许可=“ MIT”     LIC_FILES_CHKSUM =“ file:// $ {COMMON_LICENSE_DIR} / MIT; md5 = 0835ade698e0bcf8506ecda2f7b4f302”
    SRC_URI =“ file://hello.c \                file://world.c \                file://helloworld.h“

S = "${WORKDIR}"

do_compile() {
        ${CC} -c hello.c world.c
        ${AR} -cvq libhelloworld.a hello.o world.o
}

do_install() {
        install -d ${D}${includedir}
        install -d ${D}${libdir}
        install -m 0755 helloworld.h ${D}${includedir}
        install -m 0755 libhelloworld.a ${D}${libdir}
}

当我说bitbake static时,将在tmp / work文件夹中创建静态库

当我将其包含在conf / local.conf文件中时,其内容如下: IMAGE_INSTALL_append =“静态”

在根文件创建阶段构建失败,出现以下错误:

not found other for: 
not found modules for: 
not found deltainfo for: 
not found updateinfo for: 
oe-repo: using metadata from Tue 02 Jul 2019 03:54:50 AM UTC.
No module defaults found
No match for argument: static
Error: Unable to find a match

能帮我解决错误吗?

更新:更改IMAGE_INSTALL_append =“ static-staticdev”后,出现以下错误:

No module defaults found
--> Starting dependency resolution
--> Finished dependency resolution
Error: 
 Problem: package static-staticdev-0.1-r0.cortexa7t2hf_neon_vfpv4 requires static-dev = 0.1-r0, but none of the providers can be installed
  - conflicting requests
  - nothing provides static = 0.1-r0 needed by static-dev-0.1-r0.cortexa7t2hf_neon_vfpv4
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

1 个答案:

答案 0 :(得分:1)

Yocto将自动将${D}中安装的文件拆分为不同的软件包。在您的情况下,helloworld.h将进入${PN}-dev(在您的情况下,${PN}等于静态,但是我写了$ {PN}以避免混淆),而libhelloworld.a将进入${PN}-staticdev ,但是由于没有其他文件,因此将没有名为${PN}的程序包,因为它将为空。

如果您确实希望静态库出现在图像中,请使用IMAGE_INSTALL_append = "static-staticdev"

还有一个问题,就是普通${PN}软件包中没有文件,这是默认设置,意味着不会创建任何此类文件包。这是一个问题,因为${PN}-dev软件包对${PN}具有运行时依赖性。可以通过允许创建${PN}(即使它为空)来解决,也可以通过添加ALLOW_EMPTY_${PN} = "1"

来启用