我在C中有一个共享库。我想在我的Android设备上编译并运行一个测试应用程序。 至于我的理解,这就是我认为我必须做的事情:
我修改了android.mk文件以添加共享库
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# give module name
LOCAL_MODULE := depend1
LOCAL_SRC_FILES := libdepend1.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
# give module name
LOCAL_MODULE := depend2
LOCAL_SRC_FILES := libdepend2.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
# give module name
LOCAL_MODULE := test
# list your C files to compile
LOCAL_SRC_FILES := test.c
# this option will build executables instead of building library
include $(BUILD_EXECUTABLE)
项目编译。我在libs文件夹中获取了我的可执行文件。
使用adb在android shell上运行可执行文件时出现以下错误:
Init: Error opening /data/local/project/depend1.so: dlopen failed: could not load library "depend2.so" needed by "depend1.so"; caused by could not load library "libgcc_s.so.1" needed by "depend2.so"; caused by library "libgcc_s.so.1" not found
(注意: dlopen 是我代码的一部分)
它无法找到属于工具链的库,我没有在设备的/ system / lib中找到这个库,这引出了我的第一个问题 - 我使用的是正确的工具链(我使用过的工具链)是 arm-none-linux-gnueabi ) 其次,我是否正确为Android构建它?
答案 0 :(得分:0)
这个库使用Cmake还是automake?
对于Cmake,您只需要对其进行适当的处理(how to)
示例:cmake -DANDROID_NDK=path/to/ndk -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake --DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-21 ..
对于automake,您应该使用预构建的GCC工具链(但在NDK中弃用GCC)或创建新的独立工具链(how to)
此工具链对于Android的交叉编译100%有效
如果你仍想使用ndk-build
,你可以阅读link(我不使用它,所以我只能通过Cmake和automake进一步帮助)