qtcreator下cmake工程交叉编译及远程部署环境搭建

本文介绍如何在开发环境中配置ARM架构的交叉编译器,并通过QtCreator进行C/C++程序的开发与调试。详细步骤包括安装交叉编译器、设置QtCreator环境及调试器,同时解决部署过程中遇到的问题。

1 安装目标开发板对应的交叉编译器。

首先,在开发板上使用下面命令查看cpu硬件架构:

uname -a
我的显示有aarch64字样,即我的开发板为armv8a-aarch64架构。接下来在开发电脑上使用下面命令来安装c和c++编译器:

sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install g++-aarch64-linux-gnu

如果你的开发板是arm架构,就使用:

sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install g++-arm-linux-gnueabi

安装后,新建一个main.c文件

#include<stdio.h>
int main()
{
	printf("hello world!\n");
}
使用命令:

aarch64-linux-gnu-gcc hello.c -o h

可以在当前目录得到h的可执行文件,使用命令

file ./h
可以看到输出:

./h: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=a7ff48d62094e807ba473044eb1792fbf80784da, not stripped

可以看出他是一个ARM aarch64下的可执行文件,到此,证明交叉编译器安装成功了!那么,这些编译器安装在哪里呢?如下图/usr中,编译器程序都放在/usr/bin目录中。


2 QtCreator开发环境设置

打开QtCreator,工具-》选项,切换到“构建和运行”,”编译器“,新增一个gcc编译器,注意是要选择对应平台的g++而不是gcc,gcc是编译c程序的,g++是编译c++程序的。

选择设备,新建一个linux通用设备:


选择构建套件,新增一个构建套件,设备和编译器就选择前两步建好的项目



好了,到这里就可以新建一个cmake项目来进行测试了,qtcreator,新建项目,选择Non-Qt Project,选择构建工具的时候,选择cmake,构建套件选择刚刚建立好的套件。




调试

安装多架构支持的调试器:

sudo apt-get install gdb-multiarch

照上面在 调试器里面新建一个调试器,位置选择/usr/bin/×××,刚刚安装到就是这个位置。

在kit里面选择刚刚建好的调试器。


问题

1 在远端执行的时候,发现上传失败,原因是上传路径设置的不太对,默认是当前目录.  ,也没法改,搜索了一下发现如下方法:

Deploying CMake Projects to Embedded Linux Devices

Qt Creator cannot extract files to be installed from a CMake project, and therefore, only executable targets are automatically added to deployment files. You must specify all other files in theQtCreatorDeployment.txt file that you create and place in either the root directory of the CMake project or the build directory of the active build configuration. Currently, Qt Creator first checks the root directory and only if noQtCreatorDeployment.txt exists it checks the active build directory.

Use the following syntax in the file:

<deployment/prefix>
<relative/source/file1>:<relative/destination/dir1>
...
<relative/source/filen>:<relative/destination/dirn>

Where:

  • <deployment/prefix> is the (absolute) path prefix to where files are copied on the remote machine.
  • <relative/source/file> is the file path relative to the CMake project root. No directories or wildcards are allowed in this value.
  • <relative/destination/dir> is the destination directory path relative todeployment/prefix.

To automate the creation of QtCreatorDeployment.txt file:

  1. Define the following macros in the top level CMakeLists.txt file:
    file(WRITE "${CMAKE_SOURCE_DIR}/QtCreatorDeployment.txt" "<deployment/prefix>\n")
    
    macro(add_deployment_file SRC DEST)
        file(RELATIVE_PATH path ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
        file(APPEND "${CMAKE_SOURCE_DIR}/QtCreatorDeployment.txt" "${path}/${SRC}:${DEST}\n")
    endmacro()
    
    macro(add_deployment_directory SRC DEST)
        file(GLOB_RECURSE files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${SRC}/*")
        foreach(filename ${files})
            get_filename_component(path ${filename} PATH)
            add_deployment_file("${filename}" "${DEST}/${path}")
        endforeach(filename)
    endmacro()
  2. Use add_deployment_file(<file/name>) to add files and add_deployment_directory(<folder/name>) to add directories (including subdirectories) to theQtCreatorDeployment.txt file.
  3. Re-run cmake after you add or remove files using the macros.

因此,只要将改段命令加在你的cmake文件里面,将上面的"<deployment/prefix>"改成你想要设置的开发板部署路径,下面如果要添加其他文件或文件夹就用宏:

具体链接:http://doc.qt.io/qtcreator/creator-deployment-embedded-linux.html

add_deployment_file(f1 f2)
add_deployment_directory(fold1 fold2)


                
<think>好的,我现在需要帮助用户在Ubuntu系统下搭建Qt Creator的Windows交叉编译环境。这个问题看起来有点挑战性,特别是对于刚接触交叉编译的人来说。首先,我得回忆一下自己之前有没有做过类似的事情,或者有没有相关的知识储备。 首先,用户的需求是在Ubuntu下使用Qt Creator来编译可以在Windows上运行的程序。这意味着需要配置交叉编译工具链,可能包括MinGW或者MXE这样的工具。我之前听说过MXE(M Cross Environment),它可以帮助在Linux上构建Windows的应用程序。所以可能需要用到MXE或者类似的工具。 接下来,我需要考虑步骤的大致流程。通常,搭建交叉编译环境需要安装交叉编译器、配置Qt Creator的工具链、以及可能需要Windows的运行时库,比如使用wine来运行Windows程序进行测试。另外,Qt本身需要有针对Windows的版本,可能需要用交叉编译的方式编译Qt库,或者下载预编译的版本。 首先,用户可能需要安装MXE。MXE提供了许多预编译的库和工具链,可以简化过程。安装MXE可能需要从GitHub克隆仓库,然后进行编译。不过MXE的编译可能会比较耗时,特别是如果用户需要多个库的话。例如,用户可能需要运行`make qtbase`来编译Qt的基础库,或者`make qt5`来编译Qt5的相关模块。 然后,安装交叉编译器。MXE可能已经包含了MinGW的交叉编译器,所以可能不需要额外安装。但需要确认路径是否正确,比如MXE通常安装在/usr/lib/mxe或者用户目录下的某个位置。需要将交叉编译器的路径添加到系统的PATH环境变量中,或者在Qt Creator中直接指定。 接下来是配置Qt Creator。这包括添加新的编译器(g++ for Windows)、设置Qt版本(指向MXE编译的Qt库)、以及创建Kit将这些组件组合起来。可能需要指导用户如何在Qt Creator中设置这些选项,比如在“Kits”部分添加新的配置,选择正确的编译器、Qt版本和调试器(如果有的话)。 另外,可能还需要处理一些依赖问题,比如Windows的API库,或者通过wine来测试生成的exe文件是否能在Windows上运行。不过wine可能不是必须的,但可以作为测试的一个手段,避免频繁切换到真实Windows环境。 可能会遇到哪些问题呢?例如,路径设置错误,编译器找不到,Qt版本不兼容,或者生成的程序无法在Windows上运行。这时候需要检查编译器的路径是否正确,Qt是否用交叉编译器正确编译,以及是否所有需要的库都被正确链接。 另外,可能用户使用的是Qt的不同版本,比如Qt5和Qt6,需要注意对应的MXE支持情况。MXE可能对Qt5的支持更成熟一些,而Qt6可能需要额外的配置或者还在开发中。 还有,用户可能需要安装一些开发工具,比如cmake、make、gcc等,这些在Ubuntu下可以通过apt安装。需要确保系统已经安装了这些基础工具。 总结一下,步骤大概是: 1. 安装MXE并编译所需的Qt库。 2. 安装交叉编译器(可能通过MXE自动完成)。 3. 在Qt Creator中配置编译器、Qt版本和Kit。 4. 测试编译一个简单的项目,确认生成的exe可以在Windows下运行。 需要注意的是,MXE的安装可能需要较长时间,尤其是编译Qt库的时候。另外,要确保选择的Qt版本与交叉编译器兼容,并且正确指定了目标架构(比如i686或x86_64)。 可能还需要提醒用户,如果遇到问题,可以检查MXE的文档,或者在社区寻求帮助,比如Stack Overflow或者Qt论坛。另外,使用交叉编译时,某些平台相关的代码可能需要调整,比如文件路径的大小写或者特定于操作系统的API调用。 最后,可能需要指导用户如何打包生成的程序,包括将所需的DLL文件一起打包,以便在无开发环境的Windows机器上运行。</think>在Ubuntu下搭建Qt Creator的Windows交叉编译环境,主要依赖MXE(M Cross Environment)工具链。以下是详细步骤: --- ### **1. 安装MXE(M Cross Environment)** MXE提供预编译的Windows工具链和库,简化交叉编译配置。 ```bash # 克隆MXE仓库 git clone https://github.com/mxe/mxe.git cd mxe # 安装依赖(Ubuntu) sudo apt-get install autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool-bin libxml-parser-perl lzip make openssl p7zip-full patch perl python3 ruby sed unzip wget xz-utils # 编译MinGW工具链及Qt库(选择Qt5或Qt6) # Qt5示例(i686目标为32位,x86_64为64位): make MXE_TARGETS=i686-w64-mingw32.static qtbase # 或选择动态链接版本: make MXE_TARGETS=x86_64-w64-mingw32.shared qtbase # 等待编译完成(可能需数小时,可用-j参数加速,如make -j4) ``` --- ### **2. 配置环境变量** 将MXE路径添加到环境变量(假设MXE安装在`~/mxe`): ```bash echo 'export PATH=$PATH:~/mxe/usr/bin' >> ~/.bashrc source ~/.bashrc ``` --- ### **3. 配置Qt Creator** 1. **打开Qt Creator**,进入菜单:`Tools` → `Options` → `Kits`。 2. **添加编译器**: - **C++编译器**: 路径为 `~/mxe/usr/bin/i686-w64-mingw32.static-g++`(32位)或 `x86_64-w64-mingw32.shared-g++`(64位)。 - **C编译器**: 路径类似,将`g++`替换为`gcc`。 3. **添加Qt版本**: - 点击`Qt Versions` → `Add`,选择MXE编译的`qmake`,路径如: `~/mxe/usr/i686-w64-mingw32.static/qt5/bin/qmake` 4. **创建Kit**: - 在`Kits`标签页,新建一个Kit: - 选择刚添加的编译器和Qt版本。 - 设置`Sysroot`为MXE目录(如`~/mxe/usr/i686-w64-mingw32.static`)。 - 指定目标系统为`Windows`。 --- ### **4. 测试编译** 1. 新建一个Qt Widgets项目。 2. 选择配置好的Windows Kit。 3. 编译项目,生成`.exe`文件(默认在项目`release`目录)。 4. 将生成的`.exe`和依赖的DLL(位于`~/mxe/usr/<target>/bin`)复制到Windows系统运行测试。 --- ### **常见问题处理** - **缺少DLL**: 使用`objdump -p your.exe | grep DLL`查看依赖,从MXE的`bin`目录复制所需DLL。 - **调试支持**: 安装`make MXE_TARGETS=... gdb`,并在Qt Creator中配置交叉调试器。 - **Qt模块缺失**: 通过MXE编译更多模块,如`make qttools`。 --- ### **替代方案:直接使用MinGW** 若无需完整MXE,可单独安装MinGW: ```bash sudo apt-get install mingw-w64 ``` 然后在Qt Creator中配置`x86_64-w64-mingw32-g++`编译器,并下载Windows版Qt库。 --- 通过上述步骤,你可以在Ubuntu下高效开发并编译Windows平台的Qt应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值