QT5.8.0交叉编译

本文详述了如何在Ubuntu环境下为ARM开发板进行QT5.8.0的交叉编译,包括安装依赖库、配置交叉编译工具链、修改qtbase/mkspecs配置文件、使用configure命令进行编译以及开发板上的环境变量配置。提供了一个不含EGL和OpenGL的预编译库下载链接,并强调了qtbase的单独编译以减少时间浪费。
本文编译的是无egl
qt5.8 arm预编译库(不含opengl)下载地址(百度网盘):https://pan.baidu.com/s/1pLTpIDP
1. 准备工作
1.1 参考http://developer.t-firefly.com/thread-818-1-1.html在内核中启用nfs,然后将pc机上的/home/lkjh/nfsroot挂载到开发板子/media/nfs上。(如果你不想动内核,就在1.2步,所有qt编译需要的库都弄完后把开发板内的/lib,/usr/lib,/usr/include三个文件夹复制到电脑上,建立起和开发板相同的目录结构,将它作为挂载目录,但是不推荐这么做,因为开发板库没装对的话configure结果没有你要的库,就白复制了,比较浪费时间)
1.2 为开发板安装qt需要的库:
sudo apt-get install build-essential
sudo apt-get install libfontconfig1 libfontconfig1-dev
sudo apt-get install libxrender-dev libxrender1 libxkbcommon-dev libxkbcommon-x11-0 libxkbcommon-x11-dev libxkbcommon0  
sudo apt-get install libgtk2.0-dev
sudo apt-get install libglib2.0-dev
sudo apt-get install libfreetype6 libfreetype6-dev
最后三个和opengl有关,感觉这个库是平台相关的,不用opengl或者你的平台提供了opengl库的话就别装这个,在下面的conf文件里添加你自己平台的opengl库路径和头文件
sudo apt-get install mesa-common-dev
sudo apt-get install libglu1-mesa-dev -y
sudo apt-get install libgles2-mesa-dev
可能有少的,可以根据qt配置结果看还需要哪些库,然后去http://packages.ubuntu.com/搜索库名字,在开发板上自行安装。例如蓝牙库BlueZ等,默认开发板是没有的,需要你自己提前安装。另外如果有些库你安装了配置结果里也没有,就去看config.log
1.3 准备一个交叉编译工具链。本人使用arm-cortexa9-linux-gnueabihf-g++。
安装交叉编译器(具体可以参照友善之臂官网:http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T2/zh#.E7.83.A7.E5.86.99.E7.B3.BB.E7.BB.9F.E5.88.B0NanoPC-T2.E7.9A.84eMMC)
下载地址:https://github.com/friendlyarm/prebuilts.git 我是直接克隆过来的
首先下载并解压编译器:
git clone https://github.com/friendlyarm/prebuilts.git
sudo mkdir -p /opt/FriendlyARM/toolchain 在opt目录下建一个新的目录
sudo tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/ 把prebuilts目录下的arm-cortexa9-linux-gnueabihf-4.9.3解压到/opt/FriendlyARM/toolchain/目录下
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
export GCC_COLORS=auto

执行一下~/.bashrc脚
<think>我们正在解决Qt5.8.0编译错误的问题。根据引用内容,用户遇到了几个典型的编译错误。我们将逐步解决这些问题。引用[1]中提到了四个错误,我们将逐一处理:1.qstring_compat.cpp的错误:清空该文件内容(注意:这可能不是标准做法,但根据引用[1]的描述,可以这样解决)2.QT_VERSION_STR等相关的定义找不到:添加qconfig.h头文件3.链接时提示QDebug、QRingBuffer相关的未解析错误:修改pri文件,补充遗漏的cpp文件4.提示shgetknownfolderpath等win32相关api无法解析:修改qmake.pri,补充shell32.lib另外,引用[2]提到了静态编译时需要链接的一些库,如果用户进行的是静态编译,可以参考。步骤:1.对于qstring_compat.cpp错误:找到该文件(通常在Qt源码目录中),将其内容清空。但请注意,这可能会影响兼容性,如果后续没有出现问题则可以接受。2.对于QT_VERSION_STR等定义找不到:在报错的文件中添加头文件:```cpp#include<qconfig.h>```3.对于链接错误(未解析的符号):需要检查pri文件(通常是项目文件或Qt模块的pri文件),确保包含了所有必要的源文件。例如,如果提示QDebug相关错误,则需要在pri文件中添加:```qmakeSOURCES+=$$PWD/qdebug.cpp```具体需要添加哪些文件,根据错误提示中缺失的符号对应的源文件来确定。4.对于shgetknownfolderpath等Win32API未解析:在qmake.pri文件中(可能是项目中的,也可能是Qt模块的)添加链接库:```qmakeLIBS+=-lshell32```此外,根据引用[4],环境变量的设置也很重要。确保环境变量中包含了Qt的安装路径(例如C:\Qt\Qt5.8.0\5.8\msvc2015_64)以及bin目录已经添加到PATH中,并重启。如果用户使用的是VS2015,那么可能需要检查是否安装了正确的Qt版本(如引用[3]中提到的64位Qt5.8.0forMSVC2015)。另外,静态编译可能需要额外的库(如引用[2]所列),但如果是动态编译则不需要。总结解决方案步骤:步骤1:设置环境变量-新建用户变量QT,值为Qt安装目录(例如C:\Qt\Qt5.8.0\5.8\msvc2015_64)-在PATH环境变量中添加%QT%\bin-重启计算机步骤2:处理qstring_compat.cpp-找到文件(例如在Qt源码的qtbase/src/corelib/global/qstring_compat.cpp),清空其内容。步骤3:在出现找不到QT_VERSION_STR等定义的文件中添加头文件```cpp#include<qconfig.h>```步骤4:修改pri文件,补充缺失的源文件-根据链接错误,找到对应的源文件,在相关的pri文件中添加SOURCES条目。步骤5:在qmake.pri中添加shell32.lib-在项目的qmake.pri(或Qt模块的qmake.pri)中添加:```qmakeLIBS+=-lshell32```步骤6:如果进行静态编译,确保链接了引用[2]中提到的库(但注意,这些库名带有'd'后缀,是debug版本的,release版本不带'd')。注意:以上步骤需要根据实际错误和项目情况进行调整。如果问题仍然存在,请提供具体的错误信息以便进一步排查。相关问题:1.Qt5.8.0静态编译的具体步骤是什么?2.如何配置Qt5.8.0的环境变量?3.如何解决Qt编译中的链接错误?4.Qt5.8.0支持哪些编译器和平台?</think>以下是针对 Qt 5.8.0 编译错误的完整解决方案,结合引用内容和常见问题整理: ### 常见编译错误及解决方案 #### 1. **qstring_compat.cpp 错误** ```cpp // 解决方案:清空文件内容 // 路径:qtbase/src/corelib/global/qstring_compat.cpp // 操作:删除文件内容或注释掉全部代码 ``` #### 2. **QT_VERSION_STR 未定义** ```cpp // 解决方案:添加头文件 #include <qconfig.h> // 添加在报错文件的头部 ``` #### 3. **链接错误 (QDebug/QRingBuffer)** ```qmake # 修改 .pri 文件(如 qtbase/mkspecs/win32-msvc2015/qmake.conf) # 添加缺失的源文件: SOURCES += \ $$PWD/qdebug.cpp \ $$PWD/qringbuffer.cpp ``` #### 4. **Win32 API 未解析错误 (shgetknownfolderpath)** ```qmake # 修改 qmake.pri 文件 # 添加 shell32 库: LIBS += -lshell32 ``` #### 5. **静态编译链接问题** ```qmake # 在 .pro 文件中添加必要的库(根据引用[2]): LIBS += \ qtpcred.lib \ qtharfbuzzd.lib \ UxTheme.lib \ qtlibpngd.lib \ Qt5FontDatabaseSupportd.lib \ dwmapi.lib \ qwindowsd.lib ``` ### 环境配置关键步骤 1. **环境变量设置(引用[4])**: ```bat :: 控制面板 → 系统 → 高级系统设置 → 环境变量 新建用户变量:QT = C:\Qt\Qt5.8.0\5.8\msvc2015_64 编辑PATH:追加 ;%QT%\bin ``` **重启系统**使配置生效 2. **编译器匹配要求**: - 必须使用 **VS2015**(社区版/专业版均可) - 安装对应架构的 Qt: - 32位:`qt-opensource-windows-x86-msvc2015-5.8.0.exe` - 64位:[下载链接](http://download.qt.io/new_archive/qt/5.8/5.8.0/qt-opensource-windows-x86-msvc2015_64-5.8.0.exe) 3. **依赖库检查**: ```qmake # 在 .pro 文件中验证关键模块 QT += core gui network widgets CONFIG += static # 静态编译需要 ``` ### 完整编译流程 ```bash # 1. 打开 VS2015 开发人员命令提示符 # 2. 进入 Qt 源码目录 cd C:\Qt\Qt5.8.0\5.8\Src # 3. 配置编译参数 configure -static -prefix "C:\Qt\static" -opensource -confirm-license # 4. 启动编译(约1-2小时) nmake ``` ### 注意事项 1. **版本一致性**: - OpenCV 等第三方库必须使用 **MSVC2015** 编译版本 - 确保所有依赖库架构匹配(32/64位) 2. **调试符号处理**: ```qmake # 发布版本移除调试符号 CONFIG(debug, debug|release) { LIBS += -lLibraryd # 调试版 } else { LIBS += -lLibrary # 发布版 } ``` 3. **常见问题排查**: - **Q_OBJECT 类未链接**:运行 `qmake -tp vc` 重新生成.vcxproj - **中文乱码**:在 main.cpp 添加 `QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));` - **界面文件未更新**:删除 `ui_*.h` 后重新运行 qmake > 提示:静态编译建议使用 [Qt Static Builder](https://github.com/lucasg/Dependencies) 简化过程[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值