尝试为 arm64 构建 apk 时出现链接器错误

Posted

技术标签:

【中文标题】尝试为 arm64 构建 apk 时出现链接器错误【英文标题】:Linker error when trying to build apk for arm64 【发布时间】:2019-11-07 01:09:29 【问题描述】:

我正在尝试重建一个旧应用程序(最初是 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被删除了。我不知道如何修复它,所以我手动将“platforms\android-14\arch-x86\usr\include\sys\timeb.h”复制到“platforms\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:在函数@987654323 @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 toftime' 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'
    

应用程序.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】:

Android 不支持ftime。请改用gettimeofday。请参阅man page。

4.2BSD,POSIX.1-2001。 POSIX.1-2008 删除了 ftime().

此功能已过时。不要使用它。如果时间以秒为单位 足够了,可以使用 time(2) ; gettimeofday(2) 给出微秒; clock_gettime(2) 以纳秒为单位,但没有广泛使用。

【讨论】:

以上是关于尝试为 arm64 构建 apk 时出现链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Objective-C 框架构建 Swift 项目时出现“架构 arm64 的未定义符号”错误

尝试生成签名 Apk 时出现 Gradle 构建错误

为 iOS 构建 OCUnit 应用程序测试目标时出现链接器错误

构建 APK 时出现错误

文件是为 arm64 构建的,它不是被链接的架构 (x86_64)

为啥在使用 Cordova 构建 APK 时出现此错误?