墨盒飞飞
2019-05-31 06:52
采纳率: 100%
浏览 411

为什么 ndk build 生成的so 会加上奇怪的前缀 _Z+数字

我想用 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)
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 墨盒飞飞 2019-05-31 07:42
    已采纳

    好蠢 编译成c语言就行了!!!!!!!!!!!

    点赞 评论

相关推荐 更多相似问题