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

为什么 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语言就行了!!!!!!!!!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机