我正在使用 Fedora 36(Linux 内核 5.19.12-200.fc36.x86_64)为移动应用程序框架构建 Android 模块。当我使用 NDK 18.1.5063045.
时一切正常我测试了 Manjaro 22.0.3 并遇到了同样的问题。 OS X 运行良好!
一旦我使用更新的版本,例如 21.4.7075529,我就会出现以下错误:
[ERROR] [GRADLE]
[ERROR] [GRADLE] FAILURE: Build failed with an exception.
[ERROR] [GRADLE]
[ERROR] [GRADLE] * What went wrong:
[ERROR] [GRADLE] Execution failed for task ':module:buildNdkBuildRelease'.
[ERROR] [GRADLE] > Build command failed.
[ERROR] [GRADLE] Error while executing process /home/user/tools/android-sdk/ndk/21.4.7075529/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/home/user/dev/ti.module/android/build/module/src/main/jni/Android.mk APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=0 APP_PLATFORM=android-19 NDK_OUT=/home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj NDK_LIBS_OUT=/home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/lib APP_CPPFLAGS+=-std=c++14 APP_STL:=c++_shared -j20 --output-sync=none ti.module}
[ERROR] [GRADLE] Android NDK: WARNING:/home/user/dev/ti.module/android/build/module/src/main/jni/Android.mk:ti.module: non-system libraries in linker flags: -lkroll-v8
[ERROR] [GRADLE] Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
[ERROR] [GRADLE] Android NDK: or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
[ERROR] [GRADLE] Android NDK: current module
[ERROR] [GRADLE] [armeabi-v7a] Compile++ thumb: ti.module <= ti.module.CameraViewProxy.cpp
[ERROR] [GRADLE] [armeabi-v7a] Compile++ thumb: ti.module <= ti.module.TiCameraxModule.cpp
[ERROR] [GRADLE] [armeabi-v7a] Compile++ thumb: ti.module <= TiModuleBootstrap.cpp
[ERROR] [GRADLE] [armeabi-v7a] SharedLibrary : libti.module.so
[ERROR] [GRADLE]
[ERROR] [GRADLE] ld: error: /home/user/tools/android-sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib/arm-linux-androideabi/19/crtbegin_so.o is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj/local/armeabi-v7a/objs/ti.module/__/__/__/build/ti-generated/jni/ti.module.CameraViewProxy.o is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj/local/armeabi-v7a/objs/ti.module/__/__/__/build/ti-generated/jni/ti.module.TiCameraxModule.o is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj/local/armeabi-v7a/objs/ti.module/__/__/__/build/ti-generated/jni/TiModuleBootstrap.o is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj/local/armeabi-v7a/libc++_shared.so is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/tools/android-sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib/arm-linux-androideabi/19/liblog.so is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/.titanium/mobilesdk/linux/11.1.1.GA/android/native/libs/armeabi-v7a/libkroll-v8.so is incompatible with elf32-i386
[ERROR] [GRADLE] ld: error: /home/user/tools/android-sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib/arm-linux-androideabi/19/crtend_so.o is incompatible with elf32-i386
[ERROR] [GRADLE] clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[ERROR] [GRADLE] make: *** [/home/user/tools/android-sdk/ndk/21.4.7075529/build/core/build-binary.mk:657: /home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj/local/armeabi-v7a/libti.module.so] Fehler 1
[ERROR] [GRADLE]
ndk-build
命令及其参数是:
/home/user/tools/android-sdk/ndk/21.4.7075529/ndk-build
NDK_PROJECT_PATH=null
APP_BUILD_SCRIPT=/home/user/dev/ti.module/android/build/module/src/main/jni/Android.mk
APP_ABI=armeabi-v7a
NDK_ALL_ABIS=armeabi-v7a
NDK_DEBUG=0
APP_PLATFORM=android-19
NDK_OUT=/home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/obj
NDK_LIBS_OUT=/home/user/dev/ti.module/android/build/module/build/intermediates/cxx/Release/18714c4q/lib
APP_CPPFLAGS+=-std=c++14
APP_STL:=c++_shared
-j20
--output-sync=none
ti.module
Android.mk(存储库中的源代码)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ti.module
# Allow non-constant format strings in functions like printf(), sprintf(), etc.
LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
TI_SDK_DIR = /home/user/.titanium/mobilesdk/linux/11.1.1.GA/android
LOCAL_CFLAGS := -g "-I$(TI_SDK_DIR)/native/include"
LOCAL_CFLAGS += -Wno-conversion-null -Wno-format-security -Wno-format -Wno-tautological-compare -Wno-unused-result -Wno-deprecated-register
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -llog -L$(TARGET_OUT) "-L$(TI_SDK_DIR)/native/libs/$(TARGET_ARCH_ABI)" -lkroll-v8
ABS_SRC_FILES := \
$(wildcard $(LOCAL_PATH)/*.cpp) \
$(wildcard $(LOCAL_PATH)/../../../build/ti-generated/jni/*.cpp)
LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(ABS_SRC_FILES))
include $(BUILD_SHARED_LIBRARY)
为了使用 NDK > 18,我需要在我的 Fedora 机器上更改/安装任何内容,这样它就不会因此错误而停止:
这可能会导致错误的构建。尝试使用 LOCAL_STATIC_LIBRARIES 或 LOCAL_SHARED_LIBRARIES 来列出库依赖项...
由于它适用于 NDK 18,我继续使用 NDK 18 并将 NDK 21 文件夹链接到我的 NDK 18 文件夹。
由于它是移动框架的模块,您需要安装框架本身:
sudo npm i -g titanium
ti sdk install latest
ti build -p android -b
我已更改要使用的 Android.mk 文件
LOCAL_SRC_FILES := $(TI_SDK_DIR)/native/libs/$(TARGET_ARCH_ABI)/libkroll-v8.so
include $(PREBUILT_SHARED_LIBRARY)
它构建模块,但它不会构建/包含带有
jni/arm*
文件的 jni/x86*
和 .so
文件夹。
事实证明,您不再需要安装
i686
库即可在 Linux 下使用 NDK/Android。我已经在新的 Linux 发行版中与其他开发人员一起对其进行了测试,并且他们工作正常。
因此,如果您想运行 NDK >18,则不要安装这些工具
for Ubuntu 13.10 and beyond sudo apt-get install lib32z1 lib32ncurses5\
libstdc++6:i386
for Fedora su -c 'yum install libstdc++.i686\
ncurses-libs.i686 zlib.i686'
仅 NDK 需要 <=18!
我遇到了这个问题,通过更新
Android.mk
文件解决了。
因此,更新您的 Android.mk 文件以使用
LOCAL_STATIC_LIBRARIES
或 LOCAL_SHARED_LIBRARIES
,而不是直接在链接器标志中列出库。
此外,请查看您的 Fedora 计算机上是否安装了必要的依赖项。较新的 NDK 18.1 可能需要安装额外的库或软件包。