cmake не может найти ускоряющую библиотеку при вызове с использованием файла инструментальной привязки Android NDK в виде аргумента [дубликат]

3
задан frans 4 March 2016 в 09:26
поделиться

1 ответ

Когда кросс-компиляция, файл toolchain обычно устанавливает переменную CMAKE_FIND_ROOT_PATH . В сочетании с переменной CMAKE_FIND_ROOT_PATH_MODE_LIBRARY , установленной в ONLY, переменная CMAKE_FIND_ROOT_PATH используется как эффективная chroot для вызова find_library, поэтому обыскиваются только библиотеки с заданным префиксом (именами) .

Существуют аналоговые переменные для настройки поведения для find_path (используемые для поиска включают пути) и find_program.

Файл инструментальной привязки, который вы используете, фактически устанавливает CMAKE_FIND_ROOT_PATH в строка 1521 :

set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin"
    "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}"
    "${ANDROID_SYSROOT}"
    "${CMAKE_INSTALL_PREFIX}"
    "${CMAKE_INSTALL_PREFIX}/share" )

и ниже устанавливает CMAKE_FIND_ROOT_PATH_MODE_* переменные в ONLY. Таким образом, вам нужно установить Boost в один из этих каталогов и дать подсказки (например, BOOST_ROOT) относительно него.

Обратите внимание, что Boost должен быть создан для целевой платформы (Android NDK в вашем случае), а не для платформы, где вы перекрестно компилируете (Linux).

3
ответ дан Tsyvarev 21 August 2018 в 11:51
поделиться
  • 1
    Таким образом, нет другого шанса, но копирование папки boost include и (при необходимости) всех библиотек в одну из папок NDK. – frans 5 March 2016 в 13:12
  • 2
    Да, это обычный способ для кросс-компиляции проектов - установка всех необходимых библиотек в каталог chroot. – Tsyvarev 5 March 2016 в 18:03
  • 3
    Таким образом, это означает, что нет другого шанса, кроме копирования - ну, вы можете использовать ln -s. – Alex Cohn 27 March 2018 в 15:56
  • 4
    Да, во многих случаях программные ссылки могут заменить файлы копирования. – Tsyvarev 28 March 2018 в 07:02
Другие вопросы по тегам:

Похожие вопросы: