我正在尝试为android编译一个简单的C库,但生成的库不包含任何符号/对象!我正在使用nm
命令检查库。
这是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
答案 0 :(得分:7)
如果要显示动态符号,则必须将-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
答案 1 :(得分:0)
我遇到了类似的问题。您可以使用自定义构建进行解决,以便将-lotherlib作为最终参数传递。例如:
$ /path/to/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc \
--sysroot=/path/to/platforms/android-19/arch-arm \
-L/usr/local/src/lua-5.1.5/src -shared -lm -o mylibrary.so milibrary.o \
-lotherlib
我不是C专家所以这花了我几天才弄明白:P,不知道为什么-l应该走到最后......