我正在尝试为 android编译一个简单的C库,但生成的库不包含任何符号/对象!我正在使用nm命令检查库. 这是Android.mk: LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := my_lib_staticLOCAL_MODU
这是Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := my_lib_static LOCAL_MODULE_FILENAME := libmylib LOCAL_C_INCLUDES := $(LOCAL_PATH) LOCAL_SRC_FILES := File1.c File2.c include $(BUILD_SHARED_LIBRARY) # or include $(BUILD_STATIC_LIBRARY)
编辑:
创建一个名为“objs”的子文件夹,其中包含所有符号.
编辑:
这是gobjdump的输出:
MyLibBot.o: file format elf32-littlemips gobjdump: MyLibBot.o: not a dynamic object DYNAMIC SYMBOL TABLE: no symbols MyLibCommon.o: file format elf32-littlemips gobjdump: MyLibCommon.o: not a dynamic object DYNAMIC SYMBOL TABLE: no symbols MyLibGameLogic.o: file format elf32-littlemips gobjdump: MyLibGameLogic.o: not a dynamic object DYNAMIC SYMBOL TABLE: no symbols MyLibUndoStack.o: file format elf32-littlemips gobjdump: MyLibUndoStack.o: not a dynamic object DYNAMIC SYMBOL TABLE: no symbols如果要显示动态符号,则必须将-D标志指定为nm.
您还可以使用-T标志来实现objdump
您应该使用ndk中提供的nm或objdump版本,而不是可能用于管理开发主机库的任何版本.这些将被发现埋在ndk的工具链/文件夹下,并且会有像arm-linux-androideabi-nm这样的前缀名称
例如,(在一段时间内我没有用过Android工作的系统,所以包含陈旧版本 – 你必须使用一些独创性来找到适用于你系统的东西):
$NDK/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-nm -D mylibrary.so