Error when trying to run a Love2D application - lua

So I have just installed Lua, Love2D, LuaJIT, and Sublime Text with Lua/Love package. When I then try to run this little program:
function love.draw()
love.graphics.print("Hello World", 400, 300)
end
With CTRL+SHIFT+Band then LuaLove - Run I get this error:
luajit: [path to program]\main.lua:1: attempt to index global 'love' (a nil value)
stack traceback:
[path to program]\main.lua:1: in main chunk
[C]: at 0x00402020
[Finished in 0.0s with exit code 1]
[cmd: ['luajit', '[path to program]\\main.lua']]
[dir: [path to program]]
[path: [every thing in path variable]]
I think it has something to do with that I didn't put Love the right way in the path variable. But it's in there like this: C:\Program Files\LOVE
I hope someone has a solution.

You are running the script you have using luajit interpreter, not LOVE executable, which triggers the error you see (as the LuaJIT interpreter doesn't know anything about love objects). You need to configure LuaLove to use the LOVE executable; see this note in the documentation for details: Both Sublime 2 and 3 require the directory of your LÖVE binary to be part of your PATH variable. You can avoid this by changing the "love" path in the build script. This is more complicated in Sublime 3..

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)

Unable to get dart to output in sublime text 3 even if build successful and without errors

I cant get my simple dart code to work after setting up Sublime Text 3 for dart development. I only get the build time, while the print command does not work.
I checked all my configurations, checked if my SDK is properly defined at the right places. I also added the location of the dart-sdk to my PATH variable
This is just a simple dart code which I want to run.
void main(){
print("Hello World");
}
I am using Sublime Text 3, latest version of Dart plugin for ST3 and latest Dart-sdk as well. I can only see:
* Running <path>dartprojs.dart
* (output starts below the next line)
==============================================================================
[Finished in 0.1s with exit code 255]
[cmd: <cmd data>]
[dir: <project directory>]
[path: <my path variable>]
While in all of the tutorials I can see:
* Running <path>dartprojs.dart
* (output starts below the next line)
==============================================================================
Hello World
[Finished in 0.1s with exit code 255]

Command 'rebar doc' is inconsistent

First of all, 'rebar doc' works sometimes and sometimes not. It is strange.
Rebar version which I'm using is 2.5.1
My folder structure is:
Header_Directory
1.1 apps
1.1.1 sub_dir_1
1.1.2 sub_dir_2 / include
1.1.3 sub_dir_3
1.2 deps
1.3 confs
rebar.config
Modules in sub_dir_3 also use some include files from sub_dir_2/include folder.
The error I get when I use the command rebar doc is:
.sub_dir_3/src/my_log_worker.erl, in module header: at line 9: file
not found: some.hrl edoc: skipping source file
'sub_dir_3/src/my_log_worker.erl': {'EXIT',error}. edoc: error in
doclet 'edoc_doclet': {'EXIT',error}. ERROR: doc failed while
processing /home/learn/header_directory/apps/sub_dir_3: {'EXIT',error}
I do 'rebar clean' and then 'rebar compile' prior to 'rebar doc'
Also,when I do it in erl shell, I get error.
edoc:file("some_log_worker.erl", []).
edoc: error reading file 'some_log_worker.erl'.
** exception exit: {error,enoent}
in function edoc:read_source/2 (edoc.erl, line 664)
in call from edoc_extract:source/3 (edoc_extract.erl, line 52)
in call from edoc:read/2 (edoc.erl, line 537)
in call from edoc:file/2 (edoc.erl, line 116)
Is there any way by which I can include my hrl file either in rebar.config or edoc options?
I have '{edoc_opts, [{ i, "apps/sub_dir_3/include" }]}.' in rebar.config, still of no help.
It looks like you didn't follow the rebar/OTP conventions:
OTP Conventions
Rebar expects projects to follow the OTP conventions as described in
the OTP Design Principles document: Applications
An application should consists of the following set of directories:
src
ebin
priv
include
and have an application resource file: ebin/example_project.app or
src/example_project.app.src. In the later case, the
ebin/example_project.app file is generated from the
src/example_project.app.src one automatically during the compilation
phase.
Rebar & OTP convetions
I recommend you to move to that file organisation, it will be really much simpler to benefit from standard tools like rebar.
Yes, it is always in the best interest to follow the OTP principles. However, it worked for my app structure.
The only problem was because of #headerfile annotation in the erlang modules. Somehow, I don't know how to correctly use the #headerfile annotation.
Thanks for all the help. :)

How to integrate LuaJIT with LuaRocks on Windows?

I downloaded the source of LuaJIT and compiled it with msvc120.dll (VS 2013 x64). When I run it from the command line I have no problems executing some basic lua. Now the LuaJIT installation guide mentions moving luajit.exe and lua51.dll into their own folder. From there it says to create a lua folder and under that a jit folder with the contents of src/jit moved underneath the newly created jit folder.
From my understanding my folder should look like and contain:
luajit.exe
lua51.dll
/lua
/jit
bc.lua
[rest of jit files]
vmdef.lua
Is this correct or am I missing files?
Now after I built my luajit I tried to wire it up into my luarocks to act as my interpreter using
install.bat /LUA C:\LuaJIT\2.0.3\[folder with above content]
However this cannot find the header files. I then copied over what are the header files into the folder above and that wires it up, but I can never actually get anything to compile when pointed over to LuaJIT. Edit: The error I get is the following,
C:\LuaJIT\2.0.3\bin\lua51.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2D0
Error: Failed installing dependency: https://rocks.moonscript.org/luafilesystem-1.6.2-2.src.rock - Build error: Failed compiling module lfs.dll
Is the correct way to handle this to simply point to my lua binaries and from there leverage LuaJIT to run my files or am I doing something wrong with wiring up LuaJIT and luarocks? The former seems to work for the most part, since I only ran into one library compilation issue, lua-cjson.
I've run on exactly the same problem, but they've found a solution right here:
https://github.com/keplerproject/luafilesystem/issues/22
I knew that for "linking DLLs statically" there is a so-called "export" .lib file, which is passed to the linker (and not the DLL itself).
So, for example, when compiling, LuaRocks was doing this:
cl /nologo /MD /O2 -c -Fosrc/mime.obj -ID:/LuaJIT-2.0.4/include/ src/mime.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DNDEBUG -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) mime.c
link -dll -def:core.def -out:mime/core.dll D:/LuaJIT-2.0.4/bin/lua51.dll src/mime.obj
My LuaJIT was compiled from source in D:\LuaJIT-2.0.4\src, but I made two folders myself: D:\LuaJIT-2.0.4\include with all *.h files copied from src and D:\LuaJIT-2.0.4\bin with luajit.exe, lua51.dll, and then later lua51.exp and lua51.lib. Still same error, but this was the right track.
Fix
Now, check where your LuaRocks configs are:
luarocks.bat help
Scroll down to a section like:
CONFIGURATION
Lua version: 5.1
Configuration files:
System: D:/luarocks/config-5.1.lua (ok)
User : (... snip ...)
Edit the System configuration file, specifically see the part:
variables = {
MSVCRT = 'VCRUNTIME140',
LUALIB = 'lua51.dll'
}
Here! LUALIB should be the .lib file. If your export lib is alongside the DLL, you just need to change to:
variables = {
MSVCRT = 'VCRUNTIME140',
LUALIB = 'lua51.lib' -- here!
}
Verification
And now:
luarocks.bat install luasocket
(...)
link -dll -def:core.def -out:socket/core.dll D:/LuaJIT-2.0.4/bin/lua51.lib src/luasocket.obj (...)
(...)
luasocket 3.0rc1-2 is now built and installed in D:\luarocks\systree (license: MIT)
Note the first argument passed to the linker.

undefined symbol: luaopen_LuaXml

I had installed luaxml module using luarocks. I had used the luaxml to call in a lua script. But getting an error
Lua script:
xml = require("LuaXml");
local xobj = xml.eval('<Cmd Message="Hello"/>');
session:consoleLog("INFO","The message in the XML is "..xobj["Message"].."\n");
Error:
mod_lua.cpp:203 error loading module 'LuaXml' from file '/usr/local/lib/lua
/5.2/LuaXML_lib.so': /usr/local/lib/lua/5.2/LuaXML_lib.so: undefined symbol:
luaopen_LuaXml
stack traceback:
[C]: ?
[C]: in function 'require'
I had seen the concept of add libraries to Lua dynamically but i couldn't understand. Can anyone help me out. Briefly so that how to link the core module luaxml with the script.
Another question how can i test whether the installed module luaxml through luarocks is installed or not.
The output of nm -g /usr/lib/lua/5.1/LuaXML_lib.so tells us that this file exports luaopen_LuaXML_lib, not luaopen_LuaXML, which is what require("LuaXml") needs.
Now I don't know why require("LuaXml") is opening /usr/lib/lua/5.1/LuaXML_lib.so. It should be looking for LuaXM.so or LuaXml.lua, in this order.
LuaXML works by loading LuaXml.lua, which does require("LuaXML_lib"). This then will load LuaXML_lib.so.
Perhaps there is a mistake in your LUA_CPATH or package.cpath.

Resources