共享对象加载:版本 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.
我正在尝试为 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.