虚拟机把Qt文件传到树莓派,然后在树莓派上编译运行,但是make报错,解决不了。

问题遇到的现象和发生背景

虚拟机把Qt文件传到树莓派,然后在树莓派上编译运行,但是make报错,解决不了。

问题相关代码,请勿粘贴截图

scp -r /home/user/edog-track/ pi@192.168.12.1:/home/pi/
qmake -makefile ../edog_track/edog_track.pro
make

运行结果及报错内容

root@raspberrypi:/home/pi/edog-track/build# make
g++ -Wl,-O1 -o edog_track main.o lcmutil.o colorgroup.o mythread.o udputil.o -L/usr/local/lib/ -llcm /usr/local/lib/arm-linux-gnueabihf/libopencv_videoio.so -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video /usr/local/lib/arm-linux-gnueabihf/libopencv_core.so /usr/local/lib/arm-linux-gnueabihf/libopencv_imgcodecs.so -lQt5Network -lQt5Core -lpthread
main.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
make: *** [Makefile:139: edog_track] Error 1

我的解答思路和尝试过的方法

他说main.o的问题,但是试过了没用。
重新烧录虚拟机、镜像文件,都没用orz.

我想要达到的结果

make成功,并能看到可执行文件。

img

img

树莓派上的linux和你虚拟机的linux架构不一样。QT库不能直接移植上去,需要找树莓派版本的qt库,然后再去链接编译。

ld报错说的就是这个。
main.o错误是因为你工程没有清空,需要把.o这些文件删除干净,在树莓派上重新构建。但是问题又来了,你构建的前提是qt库正确

交叉编译

虚拟机安装交叉编译环境
https://blog.csdn.net/as3luyuan123/article/details/79878672
在虚拟机里编译出树莓派里最终运行的程序文件
程序文件拷贝到树莓派里直接运行