墨盒飞飞 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 ROS Turtlebot3 多机协同自主探索环境时遇到的多机任务分配问题,explore节点
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题