/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld:/home/heli/rknpu2/rknpu2-master/examples/rknn_yolov5_demo/../3rdparty/mpp/Linux/aarch64/librockchip_mpp.so: file format not recognized; treating as linker script /usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld:/home/heli/rknpu2/rknpu2-master/examples/rknn_yolov5_demo/../3rdparty/mpp/Linux/aarch64/librockchip_mpp.so:0: syntax error collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/rknn_yolov5_video_demo.dir/build.make:181:rknn_yolov5_video_demo] 错误 1 make[1]: *** [CMakeFiles/Makefile2:111:CMakeFiles/rknn_yolov5_video_demo.dir/all] 错误 2 make[1]: *** 正在等待未完成的任务.... [100%] Linking CXX executable rknn_yolov5_demo [100%] Built target rknn_yolov5_demo make: *** [Makefile:136:all] 错误 2
时间: 2023-07-22 07:02:11 浏览: 510
这个错误提示表明链接器(ld)无法识别文件格式,将其误认为是一个链接器脚本。可能的原因是链接器期望的库文件格式与实际提供的不一致,或者库文件本身存在问题。
建议你检查以下几点来解决这个问题:
1. 确保目标平台的交叉编译工具链和库文件正确安装并配置。
2. 检查库文件(librockchip_mpp.so)是否存在或完整。
3. 检查库文件(librockchip_mpp.so)是否与目标平台的架构兼容。
4. 如果库文件是自定义编译的,可以尝试重新编译库文件,确保正确的编译选项和目标平台设置。
通过排除这些可能性,你应该能够解决链接错误并成功编译你的项目。
相关问题
我想要在x86运行release,但是需要得到飞腾的二进制文件,我在pro文件设置了 # 设置C/C++编译器 QMAKE_CC = aarch64-linux-gnu-gcc QMAKE_CXX = aarch64-linux-gnu-g++ # 设置链接器 QMAKE_LINK = aarch64-linux-gnu-g++ 编译时报错/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/Qt/5.15.2/gcc_64/lib/libQt5Widgets.so: error adding symbols: file in wrong format collect2: error: ld returned 1 exit status make: *** [Makefile:286: dmtest] Error 1
<think>好的,我现在需要解决用户的问题:在x86架构的机器上编译Qt项目,目标是生成飞腾(ARM架构)的二进制文件,但编译时遇到了链接错误,提示libQt5Widgets.so文件格式不正确。用户已经在.pro文件中设置了交叉编译器的路径,但似乎问题依旧存在。我需要逐步分析可能的原因,并提供解决方案。
首先,用户的问题明显是交叉编译配置不正确导致的。错误信息中的“file in wrong format”通常意味着链接器试图链接一个与目标架构不兼容的库文件。在这种情况下,用户指定了aarch64的交叉编译器,但链接时却引用了x86架构的Qt库(/home/Qt/5.15.2/gcc_64/lib/...),这些库是用于宿主机的x86架构,而不是目标平台ARM架构,因此导致格式错误。
接下来,我需要考虑可能遗漏的配置步骤。用户可能正确设置了编译器和链接器,但Qt库的路径可能没有正确指向交叉编译后的ARM版本。Qt在构建时通常需要指定目标平台的架构,因此用户可能需要为ARM架构重新编译Qt库,或者确保使用的Qt库是针对ARM架构预编译的。
此外,检查Qt的安装路径是否正确。用户当前使用的是宿主机的Qt路径(gcc_64),这显然是x86架构的。正确的做法应该是使用为ARM编译的Qt库,通常这些库会安装在另一个目录下,比如可能有aarch64-linux-gnu这样的子目录。
可能的解决步骤包括:
1. 确认已安装适用于ARM架构的Qt库,或者自行交叉编译Qt源码。
2. 在.pro文件中指定正确的Qt库路径,确保链接器使用ARM版本的库。
3. 检查是否还有其他依赖库需要交叉编译,比如第三方库等。
4. 使用qmake重新生成Makefile,并确认配置正确。
另外,可能需要设置QMAKE_LIBDIR等变量,确保链接器能找到正确的库路径。或者,使用Qt的交叉编译工具链配置,比如通过指定sysroot和prefix参数,来正确指向目标平台的库和头文件。
用户可能遗漏了配置Qt的mkspecs,这是Qt用来定义编译环境的配置文件。正确的做法是使用-crosscompile参数,并指定正确的设备配置。例如,在配置Qt时使用-device选项指定ARM架构的设备配置。
总结,核心问题在于Qt库的架构不匹配,解决方案是获取或编译ARM版本的Qt库,并在项目中正确配置路径,确保所有链接的库都是目标平台的正确架构。</think>你的问题是由于在x86平台链接了ARM架构的Qt库导致的。以下是逐步解决方案:
**根本原因分析**:
错误`file in wrong format`表明:
1. 你使用了ARM交叉编译器(aarch64-linux-gnu-g++)
2. 但链接了x86架构的Qt库(`/home/Qt/5.15.2/gcc_64/lib/`)
这两个架构不兼容
**完整解决步骤**:
1. **安装交叉编译版Qt库**
- 前往Qt官方下载ARM架构预编译库(名称含`aarch64`)
- 或自行交叉编译Qt源码:
```bash
./configure -prefix /opt/Qt5.15.2-arm \
-opensource \
-confirm-license \
-release \
-xplatform linux-aarch64-gnu-g++ \
-nomake examples \
-nomake tests
make -j$(nproc)
make install
```
2. **配置.pro文件**
```qmake
# 编译器设置(保持你的原有配置)
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
# 关键:指定ARM架构的Qt库路径
QT_INSTALL_PREFIX = /opt/Qt5.15.2-arm
QMAKE_LIBDIR_QT = $$QT_INSTALL_PREFIX/lib
QMAKE_INCDIR_QT = $$QT_INSTALL_PREFIX/include
```
3. **配置qmake编译参数**
```bash
qmake -spec linux-aarch64-gnu-g++ CONFIG+=release
```
4. **清理并重建项目**
```bash
make distclean
qmake
make -j$(nproc)
```
**补充说明**:
- 若使用第三方库(如OpenCV),需同样交叉编译ARM版本
- 可用`file`命令验证二进制架构:
```bash
file libQt5Widgets.so # 应显示ARM aarch64
```
- 推荐使用sysroot打包工具链:
```qmake
QMAKE_SYSROOT = /path/to/arm-sysroot
QMAKE_CFLAGS += --sysroot=$$QMAKE_SYSROOT
QMAKE_LFLAGS += --sysroot=$$QMAKE_SYSROOT
```
完成上述配置后,编译系统将正确使用ARM架构的Qt库进行链接,即可生成飞腾平台可执行的二进制文件。
/usr/lib/gcc-cross/aarch64-linux-gnu/7/../../../../aarch64-linux-gnu/bin/ld: 当搜索用于 ./libjpeg.a 时跳过不兼容的 -ljpeg /usr/lib/gcc-cross/aarch64-linux-gnu/7/../../../../aarch64-linux-gnu/bin/ld: 找不到 -ljpeg
这个错误提示表明 ld 在搜索 ./libjpeg.a 时跳过了不兼容的 -ljpeg,同时找不到 -ljpeg。这可能是由于缺少 libjpeg 库或者库路径不正确导致的。你可以尝试检查库路径是否正确,并且确保 libjpeg 库已经正确安装。如果问题仍然存在,你可以尝试使用 -L 选项指定库路径,或者使用 -l 选项指定库名称。
阅读全文
相关推荐















