我的解决方案:
- 复制
mkspecs/linux-g++
到mkspecs/linux-g++-<my arch>
mkspecs/linux-g++/qmake.conf
如下例所示进行 修改。阅读示例文件中的注释以了解详细信息
- 我不必修改
qplatformdefs.h
,尽管您可能会为您的架构
- 使用问题中的选项运行配置脚本与
make
和make install
- 现在您可以针对交叉编译的 Qt X11 编译您的代码。
moc
,uic
等已为您的主机编译,因此它们将相应地生成代码。
- 要使用交叉编译的 Qt 库运行软件,只需
/libs
从安装 Qt 的位置复制到目标lib
文件夹,或者将其放入其他文件夹并设置 LD_LIBRARY_PATH 以包含 Qtlib
文件夹。
示例 qmake.conf:
#
# linux-g++-ppc_74xx 的 qmake 配置
#
MAKEFILE_GENERATOR = UNIX
模板 = 应用程序
CONFIG += qt warn_on 发布增量链接_prl
QT += 核心 gui
QMAKE_INCREMENTAL_STYLE = sublib
包括(../common/g++.conf)
包括(../common/linux.conf)
#
# 对 g++.conf 的修改
#
# my_arch-g++ 是你的 g++ 的完整可执行路径,确保你的 PATH
# 包含你的工具链的目录
#
QMAKE_CC = my_arch-g++
QMAKE_CXX = my_arch-g++
QMAKE_LINK = my_arch-g++
QMAKE_LINK_SHLIB = my_arch-g++
#
# 我必须为我的工具链没有的包提供包含和库
# 提供这主要是 X11 和 glib 的东西。你要么必须
# 自己交叉编译或者从你的发行版中获取
#
QMAKE_CFLAGS = -I/path/to/your/includes \
-L/路径/到/你的/库
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
#
# 修改 linux.conf
#
# 和上面的 g++ 一样
#
QMAKE_AR = my_arch-ar cqs
QMAKE_OBJCOPY = my_arch-objcopy
QMAKE_STRIP = my_arch-strip
#
# 我在将 Qt 源代码与 X11 链接时遇到了各种问题,具体取决于我的方式
# 指定包含路径。我的工具链提供了大部分 X11 功能
# 我只需要在 CXXFLAGS 和 CFLAGS 中添加缺失的部分,
# 但具体指定在哪里可以找到 X11 包含和特定的库
# 到我的工具链修复了我遇到的一些问题
#
QMAKE_INCDIR_X11 = /path/to/your/toolchain/includes
QMAKE_LIBDIR_X11 = /path/to/your/toolchain/libs
加载(qt_config)
更新:
此解决方案适用于“独立”编译。如果您需要为 Angstrom、OpenEmbedded、Android、OpenWRT 等构建 Qt X11,则必须使用它们各自的构建系统进行正确编译。例如,对于 OpenEmbedded 目标(即 Angstrom),您必须编写 BitBake 配方。
由于需要支持遗留系统而出现此问题。使用嵌入式 Qt 不是一种选择。对于新项目,我强烈推荐使用 Embedded Qt。