Компоновщик выдает ошибку неопределенных символов при перекрестной компиляции галогенида

#c #cmake #cross-compiling #halide

Вопрос:

Эй, я пытаюсь встроить Halide в статическую библиотеку для архитектуры Android arm64-v8a в системе OSX хоста. Когда я выполняю следующие команды, я получаю следующие ошибки связывания. Что я делаю не так?

Команда выполнить

 $ cmake -S .-B build 
        -DCMAKE_CROSSCOMPILING=True 
        -DHalide_TARGET=arm-64-android 
        -DHalide_SHARED_LLVM=ON 
        -DBUILD_SHARED_LIBS=OFF 
        -DLLVM_DIR=/usr/local/Cellar/llvm/12.0.1/lib/cmake/llvm 
        -DClang_DIR=/usr/local/Cellar/llvm/12.0.1/lib/cmake/clang 
        -DLLD_DIR=/usr/local/Cellar/llvm/12.0.1/lib/cmake/lld 
        -DLLVM_TABLEGEN=/usr/local/Cellar/llvm/12.0.1/bin/llvm-tblgen 
        -DCLANG_TABLEGEN=/usr/local/Cellar/llvm/12.0.1/bin/ 
        -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-android 
        -DLLVM_TARGET_ARCH=aarch64 
        -DLLVM_TARGETS_TO_BUILD=aarch64 
        -DCMAKE_BUILD_TYPE=Debug
$ cmake --build ./build
 

Ошибки Связывания

 ld: warning: ignoring file variable_num_threads.a, building for macOS-x86_64 but attempting to link with file built for unknown-unsupported file format ( 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A 0x2F 0x20 0x20 0x20 0x20 0x20 0x20 0x20 )
ld: warning: ignoring file variable_num_threads.runtime.a, building for macOS-x86_64 but attempting to link with file built for unknown-unsupported file format ( 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A 0x2F 0x20 0x20 0x20 0x20 0x20 0x20 0x20 )
Undefined symbols for architecture x86_64:
  "_halide_join_thread", referenced from:
      _main in variable_num_threads_aottest.cpp.o
  "_halide_set_num_threads", referenced from:
      mess_with_num_threads(void*) in variable_num_threads_aottest.cpp.o
      _main in variable_num_threads_aottest.cpp.o
  "_halide_spawn_thread", referenced from:
      _main in variable_num_threads_aottest.cpp.o
  "_variable_num_threads", referenced from:
      _main in variable_num_threads_aottest.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
 

Комментарии:

1. Стоит отметить: ни одна из LLVM_* переменных (кроме LLVM_DIR ) ничего не делает в сборке libHalide. Кроме того, Halide_TARGET влияет только на тесты генератора и не влияет на основную библиотеку.

2. Спасибо за ваши заметки

Ответ №1:

В настоящее время мы не поддерживаем перекрестную компиляцию libHalide. Если вы хотите создавать конвейеры для arm64-v8a, вам следует использовать Halide::Generator инфраструктуру для запуска генератора на машине сборки и создания библиотек для вашей целевой архитектуры там.

Однако я лично работаю над этим… https://github.com/halide/Halide/pull/6071

Зайдите еще раз через несколько недель!

Комментарии:

1. Можете ли вы дать образец для этого?

2. github.com/halide/Halide/tree/master/test/integration/xc — создайте проект дважды: один раз для генераторов, построенных на хосте, и еще раз для цели. Вот тестовый код: github.com/halide/Halide/blob/…

3. Хорошо, взглянем на это как можно скорее, спасибо за ваше время, будем с нетерпением ждать, когда кросс-компиляция будет готова