gpt4 book ai didi

c++ - cmake:架构的 find_package

转载 作者:行者123 更新时间:2023-11-27 23:35:42 26 4
gpt4 key购买 nike

在交叉编译时,我习惯于使用工具链文件来指定(除其他外)CMAKE_SYSTEM_PROCESSOR

在 Ubuntu 和其他 Linux 发行版中,它似乎能够安装用于其他架构的库。例如,如果我在 x86-64 机器上工作,并且想为 64 位 ARM 安装 libpng,那么我会:

dpkg --add-architecture arm64
apt-get update
apt-get -y install libpng-dev:arm64

在这之后,我有了 arm64 的 libpng 二进制文件。这些似乎安装在 /usr/lib/aarch64-linux-gnu 中。

现在我的理解是,如果我尝试在我的 CMakeLists.txt 文件中找到 libpng(参见 CMake compile options for libpng):

find_package(PNG REQUIRED)
include_directories(${PNG_INCLUDE_DIR})
target_link_libraries(example ${PNG_LIBRARY})

它将找到主机(在本例中为 x86-64)的包,而不是目标(arm64)的包。

有没有办法告诉 Cmake 的 find_package 目标架构?在理想情况下,find_package 会在搜索之前检查 CMAKE_SYSTEM_PROCESSOR。我想知道处理这种情况的最简单和最通用的方法,因为我正在链接几个库。

目前我知道的唯一方法是硬编码目标库的路径。

最佳答案

FindPNG.cmake这样的模块使用 find_pathfind_library 找到所有的东西。

您可以影响 find_library通过将 CMAKE_LIBRARY_ARCHITECTURE 设置为 aarch64-linux-gnu。尝试在您的工具链文件中设置 CMAKE_LIBRARY_ARCHITECTURE

关于c++ - cmake:架构的 find_package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59371967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com