我想用 ndk 生成lua 的交互 so 以供 lua使用
这是源码
#include <math.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int ding_sum2(lua_State *L){
double d1 = luaL_checknumber(L, 1);
double d2 = luaL_checknumber(L, 2);
lua_pushnumber(L, d1+d2);
return 1;
}
const struct luaL_Reg ding_lib[] = {
{"ding_sum2" , ding_sum2},
{NULL, NULL}
};
int luaopen_ding_lib(lua_State *L){
luaL_newlib(L, ding_lib); // 5.2
//luaL_register(L, "ding_lib",ding_lib); // lua 5.1
return 1;
}
这是 Linux 下 nm -D .so 的结果
他为什么要加上 _Z+数字这种奇怪的前缀
这样lua 就没法正确识别了啊.
上面还有未列出
00002004 A __bss_start
U __cxa_atexit
U __cxa_finalize
00002004 A _edata
00002004 A _end
U __stack_chk_fail
U _Z13luaL_setfuncsP9lua_StatePK8luaL_Regi
U _Z14lua_pushnumberP9lua_Stated
U _Z15lua_createtableP9lua_Stateii
U _Z16luaL_checknumberP9lua_Statei
00000620 T _Z16luaopen_ding_libP9lua_State
如果是用gcc 直接编译 就是这样
上面还有未列出
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w _Jv_RegisterClasses
U luaL_checknumber
U luaL_register
00000000000007dd T luaopen_ding_lib
U lua_pushnumber
这是什么原因呢 应该怎么解决呢
下面是 Android.mk
LOCAL_PATH := $(call my-dir)
TARGET_ARCH := arm
TARGET_PLATFORM := android-14
include $(CLEAR_VARS)
LOCAL_CFLAGS += -D__linux__ -D__embedded__ -D__android__ -W -Wall
MY_CPP_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES := C:\BC\lua-5.2.0\src
LOCAL_MODULE := libNative
LOCAL_LDLIBS := -llog
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LOCAL_LDLIBS +=-L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
$(call import-module, android/support)