Познаю новую область – разработку под embedded linux со всеми радостями кросс-компиляции и удаленной отладки. Целевая платформа – aarch64, компилятор под нее в составе SDK от разработчика. Нужно собрать библиотеку, у которой много зависимостей – конкретно OpenAL, OpenGL, X11 – самые важные для нее. Сам компилятор на рабочей машине уже настроил, с Eclipse связал, remote debug тоже организовал – все работает. Перешел к сборке библиотеки, и тут очевидно, что cmake-проект будет для сборки пытаться подтягивать зависимости с хоста, который x86, и сборка таким образом невозможна. Нашел решение, что нужно примонтировать файловую систему удаленной aarch64-машины, затем в CMAKE_SYSROOT указать рут удаленной файловой системы, что и сделал. Само собой, указал CMAKE_C/CXX_COMPILER/LINKER. Но библиотека все-равно не собирается – начала спотыкаться на попытке cmake протестировать компилятор с таким выводом:
Determining if the C compiler works failed with the following input: Change Dir: /<,директория исходников на хосте>,/CMakeFiles/CMakeTmp Run Build Command(s): /mnt/<,удаленная файловая система>,/usr/bin/gmake -f MakeFile -cmTc_f5bb8/fast && /mnt/<,удаленная файловая система>,/usr/bin/gmake: <,кракозябры>, not found
Таких ошибок с кракозябрами вываливает несколько строк. Пробовал добавлять к cmake аргумент –debug-trycompile, чтобы увидеть содержимое временных файлов – конкретно тестового файла для компиляции – но там ничего подозрительного не было. Что я делаю не так? Вопрос стоит остро, т.к. нужно дальше работать, а процесс встал из-за проблемы, описание которой даже затруднительно найти в сети.
sdv_cyborg
21 сен 2022, 14:46
UPD: Тупость конкретно с этой ошибкой разобрал: sysroot задал удаленный, gcc с хоста, а какой make брать – не указал, вот он и пытался исполнить gmake с arm-машины. Проблемы другие. Линковщик жалуется на то, что не может найти libc, libgcc и объектные файл crt1.o, crti.o и т.д. Подозреваю, что проблема в том же, но дело в том, что build-essential установлен и на удаленной машине, и на хосте. Как в этой ситуации объяснить линкеру, что часть либ надо брать из удаленного сисрута (всякие OpenGL/OpenAL и т.д.), часть – из компилятора на хосте (libgcc и crt)?
Viewing 0 reply threads
Вы должны войти в систему, чтобы ответить в этой теме.