【问题标题】:Yocto- gcc cannot find shared libraryYocto-gcc 找不到共享库
【发布时间】:2016-11-08 07:22:00
【问题描述】:

我有一个层在 Yocto 的 usr/lib (libbbexample.so) 目录中创建一个共享库。该库包含几个函数。

所以我创建了另一个新层,我在其中编写了一个程序,该程序将使用 libbbexample.so 提供的函数

helloworld.c

#incude<stdio.h>
#include<bbexample.h>

int main()
{
    int data;

    data = get_data(); // this function is present in libbbexample.so 

    printf("data is %d",data);

    return 0;
}

所以我尝试 bitbake 新层,但我收到错误 "cannot find -libbbexample"

新建层的.bb文件内容如下

do_compile() {
         ${CC} helloworld.c -o helloworld -libbbexample ${LDFLAGS} 
}

do_install() {
         install -d ${D}${bindir}
         install -m 0755 helloworld ${D}${bindir}
}

我已将创建共享库的旧层的优先级设置为 6 以及使用共享库 (.so) 的新层的优先级为 7。

谢谢

【问题讨论】:

  • 你添加了那个层的依赖吗?
  • no我没有添加,因为老层会生成.so文件,只有生成图像时,我不知道添加依赖项

标签: c embedded shared-libraries yocto .so


【解决方案1】:

要将 lib 添加到您的 gcc 命令中,您必须从名称中删除 lib

改变

-libbbexample

-lbbexample

The man 作为参考。

如果这还不够,您必须在 helloworld 示例之前编译和安装 .so 文件。您可以使用:

【讨论】:

  • 因为.so文件只有在整个yocto镜像构建完成时才会生成,我不知道gcc在bitbake层时是否能找到.so文件。
  • 我不确定能得到你。您可以避免重建整个图像。您可以使用bitbake -c cleansstate your_recipe_name 将所有文件清理到 temp/work 目录中。所以bitbake your_recipe_name为你的食谱重做整个工作。
  • 不,先生,我的意思是旧层会生成 .so 文件,只有当我将 yocto 图像闪存到伽利略板上时,我才能看到 .so 文件。所以如果我向 yocto 添加一个新层,它是否能够找到 .so 文件
  • 好的。所以问题出在目标设备上。但只有当你在目标上对他的 helloworld 配方进行 bitbaking 时才会成为问题。如果您(我猜)在主机上对 helloworld 配方进行 bitbaking,则 .so 必须位于 workbuild 目录的 sysroot 中。你能澄清一下吗?
  • 我先 bitbaking Helloworld recipie,最后 bitbaking core-image。
猜你喜欢
  • 2016-02-17
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多