Aminos
Aminos

Reputation: 871

is it possible to call require from C

I have a module compiled in a shared object (I followed the library part of this article https://chsasank.github.io/lua-c-wrapping.html) and I want to load it from C not from the interpreter.

Is it possible ? If so how to do it ?

Upvotes: 1

Views: 1982

Answers (3)

Gubbaset
Gubbaset

Reputation: 76

I know that I am late, but someone else may struggle with this right now (like I just did).
This is a simple way of doing "require" from C:
int reqRes = luaL_dostring(L, "local t=require('myLib') return (t~=nil)");
if (reqRes==0)
//success
else
//failed

Upvotes: 1

Bilgus
Bilgus

Reputation: 9

Unfortunately, right now, I'm using Lua 5.1 and "dolibrary" function doesn't exist, I >tried to take some part of the code and it crashes :\ So, for now, I use luaL_dostring(L, >"require 'libMyWrappings'"); libMyWrappings must be in the same directory as the c >program, and I can't use a path to indicate the lib. – Aminos Jan 22 at 11:45

I just ran into the same issue, it has to do when the package library is loaded {LUA_LOADLIBNAME, luaopen_package} needs to happen before you try and call it

Upvotes: 0

Vlad
Vlad

Reputation: 5867

Yes, it's possible, as require is a function stored in a global environment. Lua does the same in standalone interpreter when it needs to process the -l option, see the dolibrary function.

You do this the same way as with any other global function - in simplest case calling lua_getglobal(), then pushing the name of the file to require, and calling lua_call/lua_pcall/whatever.

Upvotes: 6

Related Questions