Ошибка GLIB C: кросс-компиляция ARMNN на x86_64 (Ubuntu18.04) для ARM Cortex A9 (Debian 9) - PullRequest
0 голосов
/ 06 марта 2020

Я кросс-скомпилировал ARMNN для моего устройства ARM Cortex-A9 (Debian 9) на моей хост-системе x86_64 (Ubuntu 18.04).

Я успешно построил ARMNN и все его зависимости без каких-либо ошибок, но когда я пытаюсь запустить пример mnist на Cortex-A9, он выдает следующую ошибку:

duu@34d456-45433g:~/ML-examples/armnn-mnist$ make test
arm-linux-gnueabihf-g++ -O3 -std=c++14 -I/home/duu/armnn/armnn/include mnist_caffe.cpp -o mnist_caffe -L/home/duu/build -larmnn -larmnnCaffeParser
/home/admin/build/libarmnn.so: undefined reference to `exp2f@GLIBC_2.27'
/home/admin/build/libarmnn.so: undefined reference to `logf@GLIBC_2.27'
/home/admin/build/libarmnn.so: undefined reference to `log2f@GLIBC_2.27'
/home/admin/build/libarmnn.so: undefined reference to `powf@GLIBC_2.27'
/home/admin/build/libarmnn.so: undefined reference to `expf@GLIBC_2.27'
collect2: error: ld returned 1 exit status
Makefile:12: recipe for target 'mnist_caffe' failed
make: *** [mnist_caffe] Error 1

Позже я понял, что устройство должно иметь тот же компилятор и тот же пакет GLIB C, оба с те же версии, что и на хосте, на котором была скомпилирована библиотека.

Я скомпилировал ARMNN, используя g cc -6.4.0 и glib c -2.27 на хосте, и у меня есть g cc -6.3. 0 и glib c -2.24 на устройстве Cortex-A9.

Мне удалось сопоставить версии G CC и устранить ошибку компилятора, но я не могу найти совпадающие версии GLIB C на Ubuntu 18.04 и debian 9.

Есть ли способ установить версию GLIB C на любую из систем, которая является общей для обеих систем?

PS: Любой другой способ решения этот вопрос высоко ценится.

1 Ответ

0 голосов
/ 07 марта 2020

Вот список возможных вариантов, о которых я могу подумать прямо сейчас:

  1. запустите ваше приложение, указав LD_LIBRARY_PATH, указывая на каталог, содержащий руку glib c dynamici c библиотеки (v2.27), скопированные из вашей системы x86_64 - см. этот пост .
  2. Перекомпилируйте ваше приложение в вашей целевой системе, если это возможно, если ваша целевая система может использовать NFS, например ,
  3. кросс-компилируйте stati c версию вашей библиотеки / приложения, связав ее, используя -static -static-libgcc -static-libstdc++ - см. этот пост .
  4. use arm - linux -musleabihf-cross или одного из его друзей за кросс-компиляцию stati c версии вашей библиотеки / приложения, если это не работает с gcc / g ++ и glib c.
  5. запустите ваше приложение в изолированной среде, содержащей библиотеки arm Dynami c, с которыми вы связали свое приложение в системе x86_64 - для получения более подробной информации см. этот пост ,
  6. install docker на вашей системе Cortex-A9, и построить минимальный Образ debian / ubuntu docker, содержащий версию Debian / Ubuntu, использующую glib c 2.27, вместе с вашей библиотекой и приложением и выполняющую приложение в контейнере.
...