Ошибка компоновщика при попытке собрать apk для arm64 - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь восстановить старое приложение (изначально armeabi) для поддержки arm64. Текущий NDK - это android-ndk-r10e-windows-x86_64. Я должен использовать эту версию NDK. Другие версии NDK сломают текущий код.

Я изменил уровень приложения build.gradle с

abiFilters "armeabi"

до

abiFilters "armeabi",'arm64-v8a'

Однако, когда я пытаюсь собрать первый раз, я получаю сообщение об ошибке: C: /Users/user/Documents/android_studio/app/src/main/jni/gameswf/base/tu_timer.cpp: 8: 38: фатальная ошибка: sys / timeb.h: такого файла или каталога нет #include // для ftime ()

Похоже, что в android-ndk-r10e файл timeb.h удален. Я понятия не имел, как это исправить, поэтому я вручную скопировал «платформы \ android-14 \ arch-x86 \ usr \ include \ sys \ timeb.h" в «платформы \ android-21 \ arch-arm64 \ usr \ include» \ sys \ timeb.h ", попробуйте еще раз, и я получил ошибку ниже:

C: /Users/user/Documents/android_studio/app/build/intermediates/ndkBuild/release/obj/local/arm64-v8a/objs/native-lib/gameswf/base/tu_timer.o: в функции tu_timer::init_timer()': C:/Users/user/Documents/android_studio/app/src/main/jni/gameswf/base/tu_timer.cpp:15: undefined reference to FTIME» C: /Users/user/Documents/android_studio/app/build/intermediates/ndkBuild/release/obj/local/arm64-v8a/objs/native-lib/gameswf/base/tu_timer.o: в функции tu_timer::get_ticks()': C:/Users/user/Documents/android_studio/app/src/main/jni/gameswf/base/tu_timer.cpp:21: undefined reference to ftime ' collect2.exe: ошибка: ld вернул 1 состояние выхода

уровень приложения build.gradle

defaultConfig {
    //applicationId "applicationId"
    minSdkVersion 14
    targetSdkVersion 26

    // Enabling multidex support.
    multiDexEnabled true

    ndk {
        moduleName "native-lib"
        //abiFilters "armeabi"
        abiFilters "armeabi",'arm64-v8a'
    }
}

Application.mk

APP_PLATFORM := android-9
APP_STL := gnustl_static
APP_ABI := all

#APP_OPTIM := debug
APP_OPTIM := release

ifeq ($(APP_OPTIM),debug)
  APP_CPPFLAGS := -O0 -g $(APP_CPPFLAGS)
else
  APP_CPPFLAGS := -O2 -DNDEBUG -g $(APP_CPPFLAGS)
endif

Я не знаю, что делать дальше. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 26 июня 2019

Android не поддерживает ftime.Вместо этого используйте gettimeofday.См. Справочную страницу .

4.2BSD, POSIX.1-2001.POSIX.1-2008 удаляет спецификацию ftime ().

Эта функция устарела.Не используйте это.Если времени в секундах достаточно, можно использовать время (2);gettimeofday (2) дает микросекунды;clock_gettime (2) дает наносекунды, но не так широко доступна.

...