我正在尝试为嵌入式linux (arm)编译qt6。我设置了以下配置:
3.22.1
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)./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一部分的对象文件。
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‘’
我还尝试将完整的目录路径添加到“库”路径,但没有成功。我真的不知道是怎么回事。
发布于 2022-01-20 18:46:27
在我看来这不对..。
set(CMAKE_LIBRARY_PATH /home/manra/rootfs/mysysroot)我本来希望看到更像这样的东西:
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后缀:
set(CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT}/usr)
set(CMAKE_SYSROOT ${TARGET_SYSROOT}/usr)我自己还没有测试过它,所以不能保证它能起作用,但是它太长了,不可能成为评论。
https://stackoverflow.com/questions/70779733
复制相似问题