Sam*_*Sam 8 glibc loadlibrary cross-compiling android-ndk libm
我有用C编写的本机源代码,我想在我的Android设备(Nexus 7)上运行.我已经成功地使用Android NDK在Android上运行本机代码进行了大量研究和在线教程.我对此有了一些了解.但是,我所使用的代码利用了complex.h中定义的标准数学库的复杂功能.然而,NDK C库似乎不支持复杂的功能.每当我对项目进行ndk-build时,我得到:
fatal error: complex.h: no such file or directory.
Run Code Online (Sandbox Code Playgroud)
作为一个解决方案,我想从arm-linux-gnueabi获取标准数学库(libm.a)并将其与我的本地源链接.这是我的Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := StandardC
LOCAL_SRC_FILES := libc.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mathLib
LOCAL_SRC_FILES := libm.a
LOCAL_STATIC_LIBRARIES := StandardC
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ComplexOperations
LOCAL_SRC_FILES := libComplexOperations.a
LOCAL_STATIC_LIBRARIES := mathLib
LOCAL_C_INCLUDES += /usr/arm-linux-gnueabi/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := MySource
LOCAL_CFLAGS += -std=c99
LOCAL_SRC_FILES := com_samuel_test_ComplexOperationsLib.c
LOCAL_C_INCLUDES += /usr/arm-linux-gnueabi/include
LOCAL_STATIC_LIBRARIES := ComplexOperations
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
我不得不链接arm-linux-gnueabi-gcc的libc以及libm需要它.使用arm-linux-gnueabi-gcc和编译器标志-march = armv7-a静态编译"ComplexOperations"模块.该库使用complex.h.这种构建没有任何错误和警告.但是当我运行应用程序并打电话时
System.loadLibrary("MySource");
Run Code Online (Sandbox Code Playgroud)
我在logcat上遇到这个错误:
E/dalvikvm( 3932): dlopen("/data/app-lib/com.samuel.test-1/libMySource.so") failed: Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol ".LANCHOR2" referenced by "libMySource.so"...
Run Code Online (Sandbox Code Playgroud)
在此错误上引发UnsatisfiedLinkError异常,导致应用程序在未处理时崩溃.
有人PLEAASEE可以帮助我!我已经尝试过几天自己解决这个问题!:(
解决了!
首先,我应该使用 Android NDK 提供的工具链构建我的 ComplexOperations 源代码,因为文档明确指出不要与 gnu 编译器进行交叉编译。所以这是我的第一个错误。仅此一点还没有解决我的问题,因为当我执行 ndk-build 时,我仍然遇到complex.h not find 错误。Android NDK 包含标准 libc 的非常有限的实现。为了解决这个问题,我使用了CrystaX NDK,它是 Android NDK 的扩展实现。这解决了一切!!
归档时间: |
|
查看次数: |
3173 次 |
最近记录: |