我正试图为Beagle Bone Black编写一个简单的控制台Qt / C ++应用程序。 Debian 8映像安装了Qt 5.3.2。安装在SDK中的Qt给了我交叉编译错误,所以我自己交叉编译Qt 5.6.2 from source。这需要5.6+版本,因为存在一个难以解决的问题,然后是一些错误修复和黑客攻击才能开始工作。
当我编译应用程序并在BBB上运行它时,它说:
./BeagleBoneTestCrossCompile
./BeagleBoneTestCrossCompile: /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5: no version information available (required by ./BeagleBoneTestCrossCompile)
./BeagleBoneTestCrossCompile: relocation error: ./BeagleBoneTestCrossCompile: symbol _ZN6QDebugD1Ev, version Qt_5 not defined in file libQt5Core.so.5 with link time reference
这些版本符号让我很困惑。使用objdump -TC
我可以看到我编译的Qt 5.6有它们(一个示例行):
000d910d g DF .text 00000088 Qt_5 QChar::hasMirrored(unsigned int)
但是,Debian BBB图像中安装的版本并不是:
000c8bb0 g DF .text 00000074 Base QChar::hasMirrored(unsigned int)
X86_64 Ubuntu 16.04服务器上也没有安装该版本:
0000000000132a30 g DF .text 0000000000000064 Base QChar::hasMirrored(unsigned int)
但是,使用在线安装程序安装在我的home-dir中的版本(仅适用于x86_64)确实具有Qt_5
版本:
0000000000130ec0 g DF .text 000000000000005e Qt_5 QChar::hasMirrored(unsigned int)
然后我尝试将我的交叉编译的Qt 5.6包含在我的应用程序中,但随后它上传了链:
> LD_LIBRARY_PATH=libs ./BeagleBoneTestCrossCompile
./BeagleBoneTestCrossCompile: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by libs/libQt5Core.so.5)
过去,我用我的本地Qt编译了x86软件,带有Qt_5
版本标签,并在没有版本标签的Ubuntu 16.04服务器上运行它,并且它加载了*.so
文件就好了。那么,为什么这突然出现了问题,我如何使用随附的Qt库运行Qt应用程序?
答案 0 :(得分:0)
显然,我误读了一些符号。 Qt 5.6是第一个使用Qt_5
版本符号构建的版本。较旧的人有Base
。因此,使用5.6+构建,需要5.6+才能运行。
我能够交叉编译Qt 5.5(软/ hardfloat错误仍然存在,但更容易修复),并且应用程序运行。