CMake и HAVE_POSIX_MEMALIGN при кросс-компиляции PCL - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь кросс-компилировать pcl-1.8.1 для ARM в Docker с помощью цепочки инструментов Jetson (GCC 4.8.5). Во время настройки CMake я получаю:

...

-- Performing Test HAVE_MM_MALLOC
-- Performing Test HAVE_MM_MALLOC - Failed
-- Performing Test HAVE_POSIX_MEMALIGN
CMake Error: TRY_RUN() invoked in cross-compiling mode, please set the following cache variables appropriately:
   HAVE_POSIX_MEMALIGN_EXITCODE (advanced)
For details see /pcl-1.8.1/build/TryRunResults.cmake
-- Performing Test HAVE_POSIX_MEMALIGN - Failed
-- -- GCC > 4.3 found, enabling -Wabi
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success

...

Кто-нибудь при любом изменении знает, что это за HAVE_POSIX_MEMALIGN_EXITCODE и какое значение должно быть в этом случае? Почему это не удается в первую очередь?

Я уже успешно собрал Boost с такой же настройкой, поэтому компилятор работает.

Редактировать: Хорошо, теперь я понял, что это код выхода для HAVE_POSIX_MEMALIGN теста.

1 Ответ

0 голосов
/ 02 мая 2018

С помощью команды try_run CMake компилирует и запускает некоторый код .

Если кросс-компиляция , код не может быть запущен (его можно запустить на машине target , а не на машине host , где выполняется конфигурация ), поэтому CMake просит о помощи.

Имя переменной HAVE_POSIX_MEMALIGN_EXITCODE предполагает, что необходимо запустить тест для функции POSIX_MEMALIGN, а переменная содержит результат этого теста.

  1. Если вы знаете, что функция поддерживается на целевом компьютере, вы можете установить для переменной кэша значение 0 (что означает «успех»). Или вы можете установить переменную на любое ненулевое значение, если функция не поддерживается на целевом компьютере.

  2. Кроме того, вы можете скопировать исполняемый файл теста на целевой компьютер, запустить его там и проверить результат. После этого установите переменную кэша в соответствии с этим результатом.

  3. Кроме того, современный CMake поддерживает настройку эмулятора , поэтому CMake может запускать кросс-скомпилированный исполняемый файл без ручного вмешательства пользователя. См. Описание CMAKE_CROSSCOMPILING_EMULATOR переменная.

...