如何在OSX环境下安装32位luasocket(适配32位core.so)
解决OSX下编译32位luasocket适配ET Legacy的问题
从你给出的错误信息来看:
Lua API: G_LuaStartVM error running lua script: error loading module 'socket.core’ from file 'lualibs/lib/lua/5.3/socket/core.so’: dlopen(lualibs/lib/lua/5.3/socket/core.so, 6): no suitable image found. Did find: lualibs/lib/lua/5.3/socket/core.so: mach-o, but wrong architecture /Applications/ET Legacy/lualibs/lib/lua/5.3/socket/core.so: mach-o, but wrong architecture
确实是架构不匹配导致的——ET Legacy运行在32位模式下,而默认LuaRocks在OSX上编译的luasocket是64位(x86_64)模块,所以加载失败。下面是具体的32位编译步骤:
步骤1:卸载现有64位luasocket
先把已经安装的不兼容版本移除:
luarocks remove luasocket
步骤2:设置32位编译环境变量
根据你使用的Shell类型,设置强制32位编译的参数:
- 如果你用Bash/Zsh:
export CFLAGS="-arch i386" export LDFLAGS="-arch i386" - 如果你用Tcsh:
setenv CFLAGS "-arch i386" setenv LDFLAGS "-arch i386"
步骤3:编译安装32位luasocket
直接用LuaRocks安装,同时传递32位编译参数(显式指定更稳妥,避免环境变量失效):
luarocks install luasocket CFLAGS="-arch i386" LDFLAGS="-arch i386"
步骤4:验证编译结果
安装完成后,检查生成的core.so架构是否正确:
file lualibs/lib/lua/5.3/socket/core.so
如果输出显示mach-o, i386,说明32位编译成功,此时再放到ET Legacy环境中应该就能正常加载了。
额外注意事项
- 确保你的OSX系统安装了支持i386架构的Xcode Command Line Tools,较新版本的OSX(比如Big Sur及以后)默认移除了i386编译支持,这种情况下你可能需要借助Rosetta 2来运行32位编译环境,或者降级到支持i386的旧版OSX。
- 如果安装过程中遇到编译错误,检查是否缺少32位依赖库,或者尝试手动克隆luasocket源码,修改Makefile中的编译参数后再编译安装。
内容的提问来源于stack exchange,提问作者user7554663
相关产品推荐
相关产品推荐

