尝试为 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 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'
应用程序.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 的未定义符号”错误
为 iOS 构建 OCUnit 应用程序测试目标时出现链接器错误