кртбегин так.o отсутствует для Android toolchain (пользовательская сборка)
я скомпилировал gdc вместе с gcc с помощью android build-gcc.sh сценарий, и включили новый заглушку в build / core / definitions.mk для работы с языковыми файлами D в рамках процесса сборки. Я знаю, что на данный момент все компилируется нормально, но моя проблема связана:
когда я создаю проект, я получаю эту ошибку:
ld: crtbegin_so.o: No such file: No such file or directory
Это верно и для обычных проектов только для c. Теперь я побежал быстро найти в моем каталоге сборки и обнаружил, что файл (crtbegin_so.o) существует в sysroot, который я указал, когда я скомпилировал gcc (или, скорее, когда build-gcc.sh построил его).
что я могу искать, чтобы найти решение этой проблемы?
копирование файлов локально и связывание непосредственно с ними будет достойным решением в промежуточные?
почему ld (или collect2) пытается включить их для gdc (язык D) связь?
4 ответов
проблема возникает и на NDK r7c для linux.
я обнаружил, что toolchain игнорирует местоположение платформы ($NDK_ROOT/платформы/android-8/arch-arm/usr/lib/) и ищет его в пути toolchain, что неверно.
однако, поскольку toolchain также ищет файл в текущем каталоге, одним из решений является символическая ссылка на правильную платформу crtbegin_so.o и crtend_so.o в источник каталог:
cd src && ln -s NDK_ROOT/platforms/android-8/arch-arm/usr/lib/crtbegin_so.a
cd src && ln -s NDK_ROOT/platforms/android-8/arch-arm/usr/lib/crtend_so.a
Примечание 1:это предполагает, что код компилируется для API8 (Android 2.2) с помощью NDK. Пожалуйста, измените путь к правильному пути в соответствии с вашим требованием.
примечание 2:настройки флагов, используемых:
./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
CPPFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"
Я нашел, что добавление --sysroot=$(SYSROOT)
в параметрах компилятора Исправлена ошибка:
не удается открыть crtbegin_so.О: нет такого файла или каталога
из моего файла makefile...
CC= $(CROSS_COMPILE)gcc -fvisibility-hidded $(INC) $(LIB) -shared
Примечание: это предполагает, что setenv-android.sh был запущен для настройки среды$. ./setenv-android.sh
в моем случае кавычки отсутствовали в пути sysroot. Когда я изменился
--sysroot=${ANDROID_NDK}\platforms\android-17\arch-arm
to
--sysroot="${ANDROID_NDK}\platforms\android-17\arch-arm"
проект был скомпилирован и успешно связан.
я столкнулся с тем же вопросом в двух отдельных случаях:
- в здании
boost
для android - при использовании
android-cmake
.
как только я переключился на standalone toolchain
вопрос ушел, Вот пример команды которая готовит standalone toolchain
$NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=android-toolchain --ndk-dir=$NDK_ROOT --system=darwin-x86_64 --toolchain=arm-linux-androideabi-4.9
Boost specific
для повышения вам нужно указать --sysroot
несколько раз в jam
<compileflags>--sysroot=$NDK_ROOT/platforms/android-9/arch-arm
<linkflags>--sysroot=$NDK_ROOT/platforms/android-9/arch-arm