MALOUDA-PSA 2024-06-18 20:46 采纳率: 96.7%
浏览 1
已结题

skynet运行test报错

testping.lua:

package.path = package.path .. ';/Users/yemac/c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua'
package.cpath = package.cpath .. ';/Users/yemac/c/game/skynet-demo/skynet-demo/skynet/luaclib/skynet.so'


local skynet = require "skynet"
local snax = require "skynet.snax"

skynet.start(function()
    skynet.trace()
    local ps = snax.newservice ("pingserver", "hello world")
    print(ps.req.ping("foobar"))
    print(ps.post.hello())
    print(pcall(ps.req.error))
    print("Hotfix (i) :", snax.hotfix(ps, [[

local i
local hello

function accept.hello()
    i = i + 1
    print ("fix", i, hello)
end

function hotfix(...)
    local temp = i
    i = 100
    return temp
end

    ]]))
    print(ps.post.hello())

    local info = skynet.call(ps.handle, "debug", "INFO")

    for name,v in pairs(info) do
        print(string.format("%s\tcount:%d time:%f", name, v.count, v.time))
    end

    print(ps.post.exit("exit")) -- == snax.kill(ps, "exit")
    skynet.exit()
end)


运行:
lua test/testping.lua
报错:


lua test/testping.lua                                                    
lua: error loading module 'skynet.core' from file '/Users/yemac/c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua':
        C stack overflow
stack traceback:
        [C]: in ?
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        ...     (skipping 352 levels)
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        .../c/game/skynet-demo/skynet-demo/skynet/lualib/skynet.lua:2: in main chunk
        [C]: in function 'require'
        test/testping.lua:5: in main chunk
  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-18 20:46
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的错误信息来看,问题出在Lua的模块加载机制上。skynet.lua 文件在尝试加载 skynet.core 模块时遇到了 C 栈溢出的问题,这通常意味着有无限递归或者循环依赖的情况发生。

    为了解决这个问题,我们需要确保 skynet.luaskynet.so(或 skynet.dll 在Windows环境下)能够正确地相互引用,而且没有循环加载。skynet.lua 文件应该是一个简单的代理文件,用于加载和初始化 skynet.so 中定义的 C 扩展。

    解决方案步骤:

    1. 检查skynet.lua内容:确保 skynet.lua 文件中没有包含任何可能导致循环加载的代码,例如不应该再尝试加载 skynet.core 或者 skynet 模块自身。

      通常情况下,skynet.lua 应该是这样的:

      -- skynet.lua
      local skynet = require "skynet.core"
      return skynet
      
    2. 验证路径设置:你通过修改 package.pathpackage.cpath 来指定查找 Lua 和 C 模块的路径。确认这些路径是否指向正确的 skynet.luaskynet.so 文件位置。

    3. 环境变量检查:确保你的环境变量正确配置了 Lua 的库路径。在某些系统中,可能需要设置 LUA_CPATHLUA_PATH 环境变量来指向你的模块路径。

    4. 清理缓存:有时 Lua 的模块缓存可能导致问题,尝试清除 Lua 的缓存文件(通常位于系统临时目录中),然后重新运行程序。

    5. 编译问题:如果你自己编译了 Skynet,确保没有编译错误,并且所有的依赖项都正确链接到了你的项目中。

    6. 版本兼容性:检查你的 Lua 版本与 Skynet 版本是否兼容。Skynet 可能不支持所有版本的 Lua。

    如果以上步骤都不能解决问题,你可能需要更详细的日志或调试信息来定位问题。尝试在 skynet.lua 文件中添加一些打印语句,或者在你的代码中加入更多的调试信息,以便于理解模块加载的过程。

    最后,如果你使用的是某个 Skynet 的预构建版本,考虑更新到最新版本,因为这可能是已知的 bug 或者是旧版本中的不兼容问题。如果可能,尝试从 Skynet 的官方仓库获取最新的源码并自行编译。这样可以确保你使用的是最稳定的版本,并且可以根据你的开发环境进行适当的配置。

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

报告相同问题?

问题事件

  • 系统已结题 7月4日
  • 已采纳回答 6月26日
  • 创建了问题 6月18日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?