Кросс-компиляция для AArch64 с использованием Clang, собранного из исходного кода

Я пытаюсь выполнить кросс-компиляцию в AArch64, используя clang в Ubuntu. Я установил правильные пакеты и могу успешно скомпилировать их с помощью предварительно упакованного clang, но если сделать то же самое с собственной версией, это приведет к ошибкам из-за отсутствия заголовочных файлов или библиотек. Например:

simulator/fileoutscalarmgr.cc:22:10: fatal error: 'fstream' file not found
   22 | #include <fstream>

Я могу это исправить, вручную указав пути включения (мне не нужно делать это с предварительно упакованным clang), но компиляция по-прежнему не удается при связывании, и я не могу это исправить.

Выводы clang -v при установке --sysroot=/usr/aarch64-linux-gnu и --target=aarch64-linux-gnu не совпадают для предварительно упакованных и самостоятельно созданных версий clang. Prepackage способен найти все автоматически:

Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/12
Selected GCC installation: /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64

Хотя тот, который создан из исходного кода, не может найти библиотеки кросс-компилятора (не имеет соответствующего вывода при использовании -v).

Как я могу собрать clang из исходного кода, чтобы найти эти библиотеки?

Вы уточняете --sysroot? И --target?

HolyBlackCat 08.07.2024 14:00

Да, и то, и другое. Опять же, он отлично работает с предварительно упакованным clang, поэтому моя конфигурация правильна, но то, как я создаю свою собственную версию, как-то неправильно.

muke 08.07.2024 14:10

Вероятно, у вас другие настройки по умолчанию. Может быть, это -stdlib=libc++ против -stdlib=libstdc++?

HolyBlackCat 08.07.2024 14:15

@HolyBlackCat Никаких изменений в поведении между этими двумя нет, есть ли способ найти какие-либо другие флаги по умолчанию, которые может использовать clang?

muke 08.07.2024 14:23

Предварительно упакованный clang @HolyBlackCat фактически перестает работать с libc++. добавил некоторую информацию в редактирование.

muke 08.07.2024 15:06

Ubuntu использует API Debian, поэтому вы можете apt-get source ... получить доступ к пакету, включая всю информацию о сборке, такую ​​как флаги или пути. Таким образом, вам просто нужно будет сравнить свою и их сборку. Я предполагаю: вам также нужна кросс-скомпилированная стандартная библиотека C++.

Ulrich Eckhardt 08.07.2024 15:13

@UlrichEckhardt Пытаюсь найти что-нибудь подходящее из того, что предоставляет apt source clang, можете ли вы указать мне правильное направление? У меня определенно уже установлена ​​библиотека aarch64 libstdc++.

muke 08.07.2024 15:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалось решить проблему! Неявно удаление --sysroot=/usr/aarch64-linux-gnu приводит к работе clang, созданного из исходного кода. Если просто использовать --target=aarch64-linux-gnu, все работает нормально. Однако по какой-то причине предварительно упакованный набор все еще может работать с набором sysroot.

Другие вопросы по теме