У меня есть общий вопрос, который проистекает из более конкретной проблемы с кросс-компиляцией для aarch64 / ARMv8.
Во-первых, моя конкретная проблема заключается в том, что я не могу получить свою рукубинарный файл ld для связывания с объектами glibc / libc.
example_path / aarch64-linux-gnu / bin / ld: не может найти crt1.o: Нет такого файла или каталога
Я полагаю, потому что это .o
, Я, вероятно, должен использовать тот из моей целевой платформы вместо моего хоста. Поэтому я скопировал sysroot со своей целевой платформы (без bin
, просто /usr/include
и /usr/lib
), и я добавил это в каталог в моей рабочей области с именем aarch64. Теперь, в моем файле toolchain.cmake
, я установил это, потому что я не хочу использовать библиотеки или заголовки x86-64:
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_SYSROOT /usr/bin/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu)
Поскольку CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
отправляется на ONLY
CMake должен игнорировать обычные пути к библиотекам. Так что это привело к моему общему вопросу:
Каков наилучший / наиболее распространенный способ структурирования каталогов и т. Д. Для кросс-компиляции? Очевидно, я не хочу помещать sysroot моей цели в /usr/...
, но мне нужно иметь возможность связываться с sysroot ARM для всех установленных там библиотек. Это так же просто, как использовать:
link_directories(...)
в файле набора инструментов? Где люди обычно хранят sysroot? Спасибо за ваше время и извинения, если это простой вопрос - я новичок в кросс-компиляции.