如何在Visual Studio的Linux(树莓派3)交叉编译项目中添加库?
在Windows VS中为树莓派3开发QT GUI应用的实操指南
刚上手树莓派3的Linux环境,用Windows的Visual Studio做QT GUI程序确实要注意几个关键配置点,我结合实际经验给你梳理下后续的步骤和常见问题排查:
一、先确认交叉编译环境的核心配置
因为Windows是x86架构,树莓派是ARM架构,必须用交叉编译工具链才能生成能在树莓派上运行的程序,这是最容易忽略的点:
- 确保你下载的QT预编译包是针对ARM架构的(树莓派3用的是armv7-a),而不是Windows版本的QT
- 在VS的项目属性里:
- 编译器的
Include Directories要完整包含QT的头文件目录,除了根目录xxx/qt/include,还要加上子目录比如xxx/qt/include/QtWidgets、xxx/qt/include/QtCore、xxx/qt/include/QtGui,不然编译时会找不到特定组件的头文件 - 链接器的
Library Directories要指向QT预编译包的ARM库目录,比如xxx/qt/lib - 链接器的
Input选项里,要添加你用到的QT库,比如Qt5Widgets.lib、Qt5Core.lib、Qt5Gui.lib(注意这些是交叉编译对应的导入库,不是Windows本地QT的库)
- 编译器的
二、写个极简测试代码验证配置
先搞个最基础的窗口程序,确认编译和部署流程没问题:
#include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget mainWindow; mainWindow.resize(320, 240); mainWindow.setWindowTitle("RPi QT Test"); mainWindow.show(); return app.exec(); }
三、编译与部署到树莓派的步骤
- 编译时一定要切换到交叉编译工具链,VS里要确保项目的平台工具集是你配置的树莓派ARM交叉编译器,而不是默认的MSVC
- 部署文件到树莓派:
- 用SCP命令(Windows可以用PowerShell或者WinSCP工具)把编译好的可执行文件传过去,比如:
(注意Linux下可执行文件不需要.exe后缀,传过去后可以重命名为scp .\RPiQTTest.exe pi@你的树莓派IP:/home/pi/RPiQTTest) - 依赖库处理:要么把QT预编译包里的ARM共享库(比如
libQt5Core.so.5、libQt5Widgets.so.5)传到树莓派的某个目录(比如/home/pi/qt-libs),要么直接在树莓派上安装系统自带的QT运行时,推荐后者,更稳定:sudo apt-get update && sudo apt-get install qt5-default - 在树莓派上运行程序:
- 如果用自己传的库,先设置环境变量:
export LD_LIBRARY_PATH=/home/pi/qt-libs:$LD_LIBRARY_PATH - 然后执行程序:
./RPiQTTest - 如果窗口没显示,试试指定平台插件:
./RPiQTTest -platform xcb
- 如果用自己传的库,先设置环境变量:
- 用SCP命令(Windows可以用PowerShell或者WinSCP工具)把编译好的可执行文件传过去,比如:
四、常见问题排查
- 编译时头文件找不到:检查
Include Directories是否漏加了QT组件的子目录,比如用到QtWidgets就必须加include/QtWidgets - 链接时找不到库:确认
Library Directories指向的是ARM版本的QT库,不是Windows本地的QT库;另外检查链接输入的库名是否和预编译包里的库对应(比如预编译包里是libQt5Widgets.so,对应的导入库是Qt5Widgets.lib) - 树莓派上运行提示找不到共享库:优先用树莓派的包管理器安装QT运行时,比自己传库更省心;如果一定要用自己的库,确保
LD_LIBRARY_PATH路径正确 - 窗口无法显示:确认树莓派的X11桌面环境正常运行,或者用
-platform xcb强制指定X11平台插件
内容的提问来源于stack exchange,提问作者Cu29p




