机器库和SDK库之间的差异

时间:2017-08-28 11:16:58

标签: qt-creator embedded-linux yocto bitbake openembedded

我遇到这种情况:

使用Qt Creator(在调试和运行时)它警告我没有一些库。

  

无法找到动态链接断点功能。   GDB将无法调试共享库初始化程序   并跟踪显式加载的动态代码。不能加载22个库的共享库符号,例如: /usr/lib/libQt5Quick.so.5。   使用" info sharedlibrary"命令查看完整列表。   你需要"设置solib-search-path"或者"设置sysroot"?

我暂时通过将位于/lib/usr/lib的设备上的库复制到名为sysroot的文件夹中来解决问题,并通过添加set sysroot /home/user/sdkroot/sysroot来设置qtcreator调试器

为避免我的临时解决方案,在编译sdk时,可以包含所有库(包括那些转到设备的库)吗?

我搜索了local.conf*.bb includes的设置,却没有找到任何有用的内容。

提前致谢并原谅我的英文

修改

我试图"使用" info sharedlibrary"命令查看完整列表" (正如qtcreator所建议的),对于一个非常简单的程序,请遵循以下步骤:

设备端

  • gdbserver --multi :1000

个人电脑

  • ./arm-poky-linux-gnueabi-gdb#启动我的工具链的gdb
  • target extended-remote 192.168.77.1:10000
  • run /tmp/myapp#以前由qtcreator
  • 部署
  • file ~/sdk/example/build-myapp-kit_device-Debug/myapp #load symbol table
  • 第44行
  • break 44 #breakpoint
  • run
  • info sharedlibrary

这是我得到的清单:

  

/usr/lib/libQt5Core.so.5; /usr/lib/libstdc++.so.6; /lib/libgcc_s.so.1;   /lib/libc.so.6; /lib/libthread.so.0; /lib/libz.so.1;   /usr/lib/libicui18n.so.53; /usr/lib/libicuuc.so.53; /lib/librt.so.1;   /lib/libm.so.6; /lib/ld-linux-armhf.so.3

这些库已经存在于我的toochain的sysroot中(我在qtcreator工具包中链接了#34; sysroot")。通过二进制比较,结果是它们与我从设备中拾取的库相同,并且我在qtcreator中添加了(如上所述:set sysroot /home/user/sdkroot/sysroot

如果我的应用所请求的库已经在工具链的sysroot中,为什么我仍然需要从设备添加它们?

3 个答案:

答案 0 :(得分:0)

而不是bitbake -c populate_sdk myimagename-sdk

你应该使用bitbake meta-toolchain-qt5 这将包括所有qt5-dev和qt5-mkspec以及其他路径配置到您的工具链中;

您也可以将meta-toolchain-qt5配方中的内容复制并粘贴到您的sdk中。

食谱在这里: https://github.com/meta-qt5/meta-qt5/blob/master/recipes-qt/meta/meta-toolchain-qt5.bb

答案 1 :(得分:0)

构建基于图像的SDK应该可以为您提供实际图像中的所有库。

对于Qt5,您的图像应包括:

inherit populate_sdk_qt5

当您运行bitbake -c populate_sdk myimagename时,应确保在SDK中获得Qt5。请注意,您应该可以在此处使用普通图像。

另外值得注意的是,目前Pyro中存在一个回归,导致SDK中缺少一些库头文件(但这并不适用于Qt5)。

答案 2 :(得分:0)

您可以找到有关设置Qtcreator以便嵌入式Linux交叉编译的信息here。有两个三件事是特定于相关公司的链接,但在其他方面非常通用。