首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用cmake构建嵌入式Linux QT6的问题

用cmake构建嵌入式Linux QT6的问题
EN

Stack Overflow用户
提问于 2022-01-20 01:17:29
回答 1查看 220关注 0票数 0

我正在尝试为嵌入式linux (arm)编译qt6。我设置了以下配置:

3.22.1

  • Toolchain: cc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf

  • path to my : /home/manra/rootfs/mysysroot

  • my toolchain.make

代码语言:javascript
复制
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(TARGET_SYSROOT /home/manra/rootfs/perospheresysroot)
set(CROSS_COMPILER /home/manra/toolchain8/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf)
#set(CROSS_COMPILER /home/manra/toolchain9/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf)

# specify the cross compiler
set(CMAKE_C_COMPILER ${CROSS_COMPILER}/bin/arm-none-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${CROSS_COMPILER}/bin/arm-none-linux-gnueabihf-g++)
#set(CMAKE_LIBRARY_PATH /home/manra/rootfs/mysysroot/usr/lib/arm-linux-gnueabihf)
set(CMAKE_LIBRARY_PATH /home/manra/rootfs/mysysroot)

# where is the target environment
set(CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT})
set(CMAKE_SYSROOT ${TARGET_SYSROOT})

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)

  1. 配置行使用

代码语言:javascript
复制
./configure -confirm-license -commercial -prefix /usr/local/qt6 -extprefix ~/imx6/qt6 -device linux-imx6-g++ -sysroot ~/rootfs/perospheresysroot -nomake examples -nomake tests -skip webkit -skip assistant-webkit -skip qtwebengine -skip qt3d -skip qtwayland -skip qtandroidextras -skip qtcanvas3d -- -DCMAKE_TOOLCHAIN_FILE=/home/manra/qt6/qt5/toolchain.cmake -DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON

问题是:当我试图构建时,没有找到作为rootfs一部分的对象文件。

代码语言:javascript
复制
arm-none-linux-gnueabihf/bin/ld: cannot find **crt1.o: No such file or directory**

但是,查看我的rootfs的一个子目录crt1.o就在那里:

“”找到。-name crt1.o ./usr/lib/arm gnueabihf/crt1.o‘’

我还尝试将完整的目录路径添加到“库”路径,但没有成功。我真的不知道是怎么回事。

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 18:46:27

在我看来这不对..。

代码语言:javascript
复制
set(CMAKE_LIBRARY_PATH /home/manra/rootfs/mysysroot)

我本来希望看到更像这样的东西:

代码语言:javascript
复制
set(CMAKE_SYSTEM_PREFIX_PATH /home/manra/rootfs/mysysroot/usr /usr)
set(CMAKE_LIBRARY_ARCHITECTURE arm-linux-gnueabihf)

CMAKE_LIBRARY_PATH变量应由项目在内部设置。CMAKE_SYSTEM_LIBRARY_PATH变量是与工具链等价的变量,但用于仅由CMAKE_SYSTEM_PREFIX_PATH所无法支持的特殊场景。

同样,我认为您可能在这里缺少了一个/usr后缀:

代码语言:javascript
复制
set(CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT}/usr)
set(CMAKE_SYSROOT ${TARGET_SYSROOT}/usr)

我自己还没有测试过它,所以不能保证它能起作用,但是它太长了,不可能成为评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70779733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档