如何使用Luarocks将模块安装到Luajit

如何解决如何使用Luarocks将模块安装到Luajit

我设法安装了luasocket并使用lua5.3可以正常工作,但是我找不到从luajit进行安装的方法。

如果我写print(_VERSION),则表明luajit使用lua5.1。

这是我一直在尝试的东西:

luarocks install luasocket

luarocks --local install luasocket

luarocks --lua-version 5.1 install luasocket

luarocks --lua-version 5.1 --local install luasocket

luarocks config lua_version 5.1

luarocks install luasocket

sock = require("/data/data/com.termux/files/home/.luarocks/lib/luarocks/rocks-5.1/socket")

package.path = package.path .. ";/data/data/com.termux/files/home/.luarocks/lib/luarocks/rocks-5.1" require "socket"

package.path = package.path .. ";/data/data/com.termux/files/home/.luarocks/lib/lua/5.1" require "socket"

...

错误:

$ luajit
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON ARMv7 VFPv3 fold cse dce fwd dse narrow loop abc sink fuse
> sock = require("socket")
stdin:1: module 'socket' not found:
        no field package.preload['socket']
        no file './socket.lua'
        no file '/data/data/com.termux/files/usr/share/luajit-2.1.0-beta3/socket.lua'
        no file '/usr/local/share/lua/5.1/socket.lua'
        no file '/usr/local/share/lua/5.1/socket/init.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket/init.lua'
        no file './socket.so'
        no file '/usr/local/lib/lua/5.1/socket.so'
        no file '/data/data/com.termux/files/usr/lib/lua/5.1/socket.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
        [C]: in function 'require'
        stdin:1: in main chunk
        [C]: at 0xaba4406d

我尝试将已安装的文件移至其中一些路径,但仍然无法正常工作。

解决方法

luarocks --lua-version 5.1 install luasocket

是正确的安装方式。

这也应该在输出的最后一行告诉您模块的安装位置,以便您可以检查它是否在package.path中。


似乎您只是误解了package.path的工作方式。来自manual

路径是一个字符串,其中包含用分号分隔的一系列模板。对于每个模板,该函数用名称的副本替换模板中的每个询问标记(如果有),其中将所有出现的sep(默认为一个点)替换为rep(默认为系统目录分隔符),然后尝试打开生成的文件名。

这意味着/usr/share/lua/5.1之类的路径将找不到任何东西,因为在该路径中找不到有效的Lua文件,并且由于没有?,因此不会进行任何替换。两条路径中的第一个都可以,但是许多Lua模块使用的文件名为init.lua,因此对于每个<path>/?.lua,您还应该始终添加一个<path>/?/init.lua来覆盖该选项。

通常 Luarocks应该在/usr/local/share/lua/5.1/socket.lua处安装软件包的主Lua文件,但是对于您而言,这似乎不起作用。您可以查看该目录并查看文件是否存在,然后检查luarocks config deploy_lua_dir是否实际返回/usr/local/share/lua/5.1

,

socket.lua已安装到您的LUA_PATH中不存在的目录

找到安装了socket.lua的位置,查找或定位(如果已安装):

WEB-INF

find / -name socket.lua 2>&1 | grep -v Perm sudo updatedb && locate socket.lua
~/.luaver/luarocks/3.2.0_5.1/share/lua/5.1/socket.lua
~/.luaver/luarocks/3.2.0_5.3/share/lua/5.3/socket.lua
/usr/share/lua/5.1/socket.lua
/usr/share/lua/5.2/socket.lua

编辑您的.bashrc-在这里假设一个bash shell,但是其他人遵循类似的过程。选择,然后进行相应的https://wiki.termux.com/wiki/Shells

修改

找到显示/usr/share/lua/5.3/socket.lua

的行

添加分号和从上方找到的路径。

export LUA_PATH='/usr/local/share/lua/5.1/?.lua;yadda-yadda

关闭所有打开的终端,然后打开一个新的终端,因为您已经启用了新路径。


或者,您可以使用软链接。

export LUA_PATH='/usr/local/share/lua/5.1/?.lua;/usr/share/lua/5.1'

我不喜欢这种次要的软链接方法,因为您必须为路径之外的每个Lua模块执行此操作,但是我将其包括在内,以便您知道自己的选择。如果仅用于特定模块,这将是一个可以接受的解决方案,因为它可以完成您打算要做的事情。但是,将来当您遇到与其他模块相同的问题时,您也将不得不重复这些过程。最好修改LUA_PATH。

,

这就是你所说的:

“我添加路径并获得:/data/data/com.termux/files/home/.luarocks/share/lua/5.1/ socket.lua 找不到模块'socket.core'...“

那是因为socket.lua存在于该目录中,但是您将其移动到了它的子目录中:

/data/data/com.termux/files/home/.luarocks/share/lua/5.1/ socket / core.lua

因此该目录将不再为您做任何事情,直到您删除它并重新开始。

rm /data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket.lua
rm -rf /data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket/

luarocks --lua-version 5.1 install luasocket

现在在安装时仔细观察,以查看其实际安装到的目录, 或使用我之前提到的find命令来找到与Lua5.1兼容的套接字位置,并将其添加到LUA_PATH

sudo apt install mlocate  &&  sudo updatedb  &&  locate socket.lua

您无需将这些目录添加到您的LUA_PATH中,因为它们已经被搜索

> sock = require("socket")
stdin:1: module 'socket' not found:
        no field package.preload['socket']
        no file './socket.lua'
        no file '/data/data/com.termux/files/usr/share/luajit-2.1.0-beta3/socket.lua'
        no file '/usr/local/share/lua/5.1/socket.lua'
        no file '/usr/local/share/lua/5.1/socket/init.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket/init.lua'
        no file './socket.so'
        no file '/usr/local/lib/lua/5.1/socket.so'
        no file '/data/data/com.termux/files/usr/lib/lua/5.1/socket.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'

;;不会做任何事情,因为您已经指出它不存在于这些默认目录中。

它可能正在寻找正确的目录,但扩展名错误。

/usr/local/lib/lua/5.1/socket。如此
与/usr/local/lib/lua/5.1/socket相反。 lua

在这种情况下,请使用我前面提到的软链接方法,确保使用正确的位置,这只是一个示例:

ln -s /usr/local/lib/lua/5.1/socket.lua /usr/local/lib/lua/5.1/socket.so

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res