我想在 tiny210 device 上使用 Qt 应用程序.
我安装了从 here 下载的 Qt ( qt-everywhere-opensource-src.4.8.5 ) .我设法编译了一个在 tiny210 上使用的简单应用程序。问题是现在当我尝试在设备上运行该应用程序时,出现以下错误:
libc.so.6: version 'GLIBC_2.15' not found (required by libQtCore.so.4)
libc.so.6: version 'GLIBC_2.15' not found (required by libQtNetwork.so.4)
目标设备上的/lib/
中有一个libc.so.6,不过是2.11版本。
我应该提一下,在得到这些错误之前,我还得到了没有 libQtCore.so.4
、libQtNetwork.so.4
和 libQtGui.so 的错误.4
。我只是通过将已编译的库从主机 PC 复制到设备来修复这些错误。
第一个问题是:是否有更好的方法来提供所需的库,或者复制它们就可以了?
第二个问题是:如何克服上述错误?
编辑:我读过一些关于将其构建为静态的内容,但我不确定如何构建它,以及这样做的缺点是什么。
EDIT2: 由于 artless noise 的回答,我设法克服了上述错误,但现在我得到:加载共享库时出错:libQtGui。 so.4: 无法打开共享对象文件:没有那个文件或目录
。
最佳答案
问题是交叉编译器 (apt-get install gcc-arm-linux-gnueabi
) 是基于 ARM 的,并且这个交叉编译器有一个比 ARM 设备更新的 glibc。您可以将libc 从交叉编译器目录复制到您的ARM 设备。我建议在更新主库之前使用 LD_LIBRARY_PATH
进行测试。使用 ls/var/lib/dpkg/info/*arm-linux*.list
查看与 ARM 编译器相关的大多数包。您可以使用 grep
找出库的位置(或更高级的东西,例如 apt-file
等)。
Crosstool-ng 有一个 populate脚本,但我没有在 Ubuntu 包中看到它;它非常适合您的问题。如果它存在于您的 Debian 版本中,我会使用它。
glibc 2.15 向后兼容当前系统上的 glibc 2.11。如果编译器配置了不同的选项(不同的 ABI),可能会出现问题;但是,如果是这种情况,除了库之外,您构建的 Qt 还会遇到很多问题。在这种情况下,您需要找到适合您的根文件系统的更好的编译器。
明确一点,在目标上
mkdir /lib/staging
cp libc.so-2.15 /lib/staging
cd /lib/staging
ln -s libc.so-2.15 libc.so
LD_LIBRARY_PATH=/lib/staging ls # test the library
您可能需要复制额外的库,例如 pthread、resolv、rt、crypt 等. 这些文件可能位于 sysroot/lib 之类的目录中。您可以将整个目录复制到 /lib/staging 进行测试。如果上面的 ls
起作用,那么编译器应该是 ABI 兼容的。如果您遇到崩溃或不是可执行文件,则编译器和 rootfs 可能不兼容。
Would there have been a better way to provide the needed libraries, or copying them is fine?
按照上述方法复制可能没问题。如果不正常,则必须更新编译器或根文件系统。
How can I get over the errors mentioned above?
试试上面的方法。同样,您也许可以不理会您的根文件系统。设置影子目录和 use chroot
使用复制的文件运行 Qt 应用程序作为另一种解决方案。要对此进行测试,请制作一个非常简单的程序并将其与编译器库放在测试目录中,如上所示,如 /lib/staging 。然后可以运行测试代码,
$ LD_LIBRARY_PATH=/lib/staging ./hello_world
如果这不起作用,则您的编译器和 ARM 文件系统/操作系统不兼容。没有任何图书馆魔法会有所帮助。
I've read something about building it static, but I am not sure how, and what are the downsides of this.
参见 Linux static linking is dead .我知道这似乎是一个解决方案。但是,如果编译器错误,这将无济于事。操作系统、库和操作系统保存哪些寄存器之间的调用约定将隐含在编译代码中。您可能需要 rebuild Qt with -softfp
, etc .
关于c++ - 如何在 tiny210 设备上使用 Qt 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994867/