共享对象加载:版本 Qt_5 未在文件中定义

Shared objects loading: version Qt_5 not defined in file

我正在尝试为 Beagle Bone Black 编写一个简单的控制台 Qt/C++ 应用程序。 Debian 8 镜像安装了 Qt 5.3.2。 Qt装在SDK gave me cross compile errors, so I cross-compiled 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)

但是,使用在线安装程序安装在我的主目录中的版本,仅适用于 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 库?

显然,我看错了一些符号。 Qt 5.6 是第一个使用 Qt_5 版本符号构建的版本。年纪大的有Base。所以,用 5.6+ 构建,需要 5.6+ 到 运行.

我能够交叉编译 Qt 5.5(soft/hardfloat 错误仍然存​​在,但更容易修复)和应用程序 运行s.