LuaJIT require module error - lua

require "utils.lua"
stdin:1: module 'utils.lua' not found:
no field package.preload['utils.lua']
no file 'D:\blizzard\Projects\Lua'
no file '.\utils\lua.dll'
no file 'D:\blizzard\Projects\Lua\utils\lua.dll'
no file 'D:\blizzard\Projects\Lua\loadall.dll'
no file '.\utils.dll'
no file 'D:\blizzard\Projects\Lua\utils.dll'
no file 'D:\blizzard\Projects\Lua\loadall.dll'
Why LuaJIT searches for .dll instead of .lua and how to fix this behavior?

You should require utils (ditch the .lua) , and utils.lua should be on your package.path variable, or passed as the LUA_PATH environment variable.
More info in the Lua Reference Manual about package.loaders, require() and package.path

Related

LuaJit won't find a library "lua-vips" installed via "luarocks"

I have this lua file:
-- test1.lua
--require "luarocks.loader"
vips = require "vips"
--vips = require "lua-vips"
local img = vips.Image.new_from_file("img1.jpg")
-- [...................]
It won't find the library "lua-vips" installed via "luarocks":
$ luajit test1.lua
luajit: error loading module 'vips' from file '/usr/local/lib/luarocks/rocks-5.3/':
cannot read /usr/local/lib/luarocks/rocks-5.3/: Is a directory
stack traceback:
[C]: at 0x0102caa660
[C]: in function 'require'
test1.lua:2: in main chunk
[C]: at 0x0102c3b8a0
Even after I add
export LUA_PATH="/usr/local/lib/luarocks/rocks-5.3/"
to ~/.profile, it won't.
The content of the directory luarocks -- lua-vips exists:
ls /usr/local/lib/luarocks/rocks-5.3/
lua-vips manifest
How how to fix this?
$ luarocks path
export LUA_PATH='/Users/my_user/.luarocks/share/lua/5.3/?.lua;/Users/my_user/.luarocks/share/lua/5.3/?/init.lua;/usr/local/share/lua/5.3/?.lua;/usr/local/share/lua/5.3/?/init.lua;/usr/local/Cellar/luarocks/3.0.1/share/lua/5.3/?.lua;/usr/local/lib/lua/5.3/?.lua;/usr/local/lib/lua/5.3/?/init.lua;./?.lua;./?/init.lua'
export LUA_CPATH='/Users/my_user/.luarocks/lib/lua/5.3/?.so;/usr/local/lib/lua/5.3/?.so;/usr/local/lib/lua/5.3/loadall.so;./?.so'
export PATH='/Users/my_user/.luarocks/bin:/usr/local/bin:/Users/my_user/.yarn/bin:/Users/my_user/.config/yarn/global/node_modules/.bin:/Users/my_user/.nix-profile/bin:/Users/my_user/.nvm/versions/node/v8.14.0/bin:/Users/my_user/.cargo/bin:/Users/my_user/.gem/ruby/2.5.1/bin:/Users/my_user/.rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/bin:/Users/my_user/.rubies/ruby-2.5.1/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/my_user/go/bin'
Your problem is that LUA_PATH doesn't work the same way PATHs usually work.
You don't give it a directory, but a template string with an ? representing the name of the library to load.
So, for example, if you want to find files in the /path/to/libs/ directory, you'd write "/path/to/libs/?.lua;/path/to/libs/?/init.lua" for the path.
If you literally add "/usr/local/lib/luarocks/rocks-5.3/", Lua will try to load that directory as a Lua file, which causes your error.
Remove that environment variable and tell us what error you get.
Also keep in mind that adding something to .profile requires logging out and back in again for the changes to take effect (or to source ~/.profile in every new shell you open)

Lua cannot find module in C++ api?

I am call lua in C++ applications. I have several lua files to call, like RunAPI_1208.lua , JSON.lua, etc. All the lua file is called by main.lua. While in C++ , I run all the file and finally run main.lua. I met this problem. I am using Cocos2d-x 2.2.6. How can I solve it?
[string "Main.lua"]:9: module 'RunAPI_1208' not found:
no field package.preload['RunAPI_1208']
no file './RunAPI_1208.lua'
no file '/usr/local/share/lua/5.1/RunAPI_1208.lua'
no file '/usr/local/share/lua/5.1/RunAPI_1208/init.lua'
no file '/usr/local/lib/lua/5.1/RunAPI_1208.lua'
no file '/usr/local/lib/lua/5.1/RunAPI_1208/init.lua'
no file './RunAPI_1208.so'
no file '/usr/local/lib/lua/5.1/RunAPI_1208.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
Cocos2d: [string "Main.lua"]:9: module 'RunAPI_1208' not found:
no field package.preload['RunAPI_1208']
no file './RunAPI_1208.lua'
no file '/usr/local/share/lua/5.1/RunAPI_1208.lua'
no file '/usr/local/share/lua/5.1/RunAPI_1208/init.lua'
no file '/usr/local/lib/lua/5.1/RunAPI_1208.lua'
no file '/usr/local/lib/lua/5.1/RunAPI_1208/init.lua'
no file './RunAPI_1208.so'
no file '/usr/local/lib/lua/5.1/RunAPI_1208.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
And this is my main.lua:
local run = require("RunAPI_1208")

What I'm doing wrong with relative path? Lua require error

I have tried everything but still can not require file in Lua. I am using LuaEdit 2010 on Windows 8.1
Relative path is still not working. I used these commands, which i have found but I still get the error below. My file is C:\Lua\file.lua, but I need to use relative path.
package.path = package.path .. ";../?.lua"
require ("file.lua") --also require ("file")
My error is:
Runtime Error at line -1: c:\lua\diplomka4.lua:S3: module 'file' not
found:
no field package.preload['file']
no file '.\file.lua'
no file 'C:\Program Files (x86)\LuaEdit 2010\lua\file.lua'
no file 'C:\Program Files (x86)\LuaEdit 2010\lua\file\init.lua'
no file 'C:\Program Files (x86)\LuaEdit 2010\file.lua‘
no file 'C:\Program Files (x86)\LuaEdit 2010\file\init.lua'
no file 'C:\Program Files (x86)\Lua\5.1\lua\file.luac'
no file '../file.lua'
no file '.\file.dll'
no file 'C:\Program Files (x86)\LuaEdit 2010\file.dll'
no file 'C:\Program Files (x86)\LuaEdit 2010\loadall.dll'

Lua import library from local path (luasocket)

I'm quite new to Lua and I have some problems with the import mechanism.
From other languages I'm used to do something like this:
include "./lib/mylib.h"
or in general just to pass the local path to the file I would like to include.
Now in Lua it is a bit confusing to me. I read something about that require looks for the library in the lua path.
In my case I would like to create a script that uses the luasocket library but I would like to import it from a local path so that I can deploy it without the need to have it on another machine in the lua path.
From other forums I got solutions like creating a local require function that looks in a given local library folder but that didn't work.
Then I read that I can just type require 'myfile' to import a different file locally but luasocket requires a core.dll and if I just move the lua files of the library to my local path it can't find the dll.
Is there an easy way to solve this. What do I have to do to get this working?
It is sufficient for the .dll extension to be in the LUA_CPATH (so it ends up in package.cpath). For example, put the socket.lua in C:\Foo, and put core.dll in same folder. Then require 'socket' will fail:
> print(package.cpath)
.\?.dll;.\?51.dll;C:\Program Files\Lua\5.1\?.dll;C:\Program Files\Lua\5.1\?51.dl
l;C:\Program Files\Lua\5.1\clibs\?.dll;C:\Program Files\Lua\5.1\clibs\?51.dll;C:
\Program Files\Lua\5.1\loadall.dll;C:\Program Files\Lua\5.1\clibs\loadall.dll
> print(package.path)
;.\?.lua;C:\Program Files\Lua\5.1\lua\?.lua;C:\Program Files\Lua\5.1\lua\?\init.
lua;C:\Program Files\Lua\5.1\?.lua;C:\Program Files\Lua\5.1\?\init.lua;C:\Progra
m Files\Lua\5.1\lua\?.luac
> require 'socket'
.\socket.lua:13: module 'socket.core' not found:
-- look for preload
no field package.preload['socket.core']
-- look for .lua in socket folder anywhere on package.path:
no file '.\socket\core.lua'
no file 'C:\Program Files\Lua\5.1\lua\socket\core.lua'
no file 'C:\Program Files\Lua\5.1\lua\socket\core\init.lua'
...
-- look for .luac in socket folder anywhere on package.path:
no file 'C:\Program Files\Lua\5.1\lua\socket\core.luac'
-- look for .dll in socket folder anywhere on package.cpath:
no file '.\socket\core.dll'
no file '.\socket\core51.dll'
no file 'C:\Program Files\Lua\5.1\socket\core.dll'
no file 'C:\Program Files\Lua\5.1\socket\core51.dll'
no file 'C:\Program Files\Lua\5.1\clibs\socket\core.dll'
no file 'C:\Program Files\Lua\5.1\clibs\socket\core51.dll'
...
stack traceback:
[C]: in function 'require'
.\socket.lua:13: in main chunk
[C]: in function 'require'
stdin:1: in main chunk
[C]: ?
because socket.lua requires socket.core, so Lua interpreter looks for core.lua in a "socket" folder anywhere on package.path, doesn't find it (socket folder doesnt' exist), then looks for core.dll in socket folder anywhere on package.cpath, same problem.
Now create C:\Foo\socket folder, and move core.dll to it, then require 'socket' will work (from interpreter started while cd to C:\Foo).
In your case, if you have yourLuaScript.lua in C:\Foo, you could have socket.lua in same folder, core.dll in C:\Foo\socket, and yourLuaScript.lua could require 'socket' and, as long as package.path contains .\*.lua, and package.cpath contains .\*.dll, you will be able to run yourLuaScript.lua.

What does "redefining module" error in erlang mean?

I added the mochijson2.erl module to my ejabberd src directory but when I try to compile the code I get the following error:
./mochijson2.erl:8: redefining module
Where could this module be defined? I don't have it in my source.
It means your module has two -module(...) directives, which is not allowed. Check the source code of the module.

Resources