[syslinux] Undef symbol FAIL: luaL_checklstring in vesa.c32

Ferenc Wagner wferi at niif.hu
Tue Jun 3 10:22:30 PDT 2014


"H. Peter Anvin" <hpa at zytor.com> writes:

> On 06/03/2014 02:59 AM, Ady wrote:
>
>> Testing Syslinux 6.03-pre13 in a BIOS 32-bit VM,
>> boot: vesa.c32
>> Undef symbol FAIL: luaL_checklstring
>> Failed to load COM32 file vesa.c32
>> boot:
>> 
>> Is there a Lua-related issue?
>> 
>> Is vesa.c32 expecting some kind of argument?
>
> luaL_checklstring should be found in liblua.c32.  Are you perhaps
> missing the latter?

Vesa.c32 is not an executable module, but a dynamically loaded binary
Lua module, to be require()d.  However, the Syslinux module system does
not make this distinction, so it happily tries to execute it.  Also, the
build system is not really prepared for this (and my linker fu is rather
weak).  For example its ELF headers show the need for libcom32.c32,
which is probably also superfluous, as the Lua interpreter (lua.c32)
provides that as well (just like luaL_checklstring via liblua.c32).

> I didn't realize how many modules there are in Lua, and quite frankly
> not all of them are very well named in the sense that it is clear that
> they are Lua-related.  vesa.c32 is one of those - it is one of several
> Lua modules.

Their names appear in Lua code, like eg. require "vesa", so it's not
arbitrary, but the file names can be prefixed transparently.  Currently
(with /extlinux as install path and PATH /lua specified in the config):

> print (package.cpath)
/lua/?.c32;/lua/?/init.c32;/extlinux/?.c32;/extlinux/?/init.c32;./?.c32

The question marks above are replaced by the argument of require().
This variable is preset by setpath() at com32/lua/src/loadlib.c:674,
where some string could be inserted before the question marks, or
LUA_CPATH_DEFAULT (in luaconf.h) could be set to _lua.c32 instead of
simply .c32 to have some extra suffix.
-- 
Regards,
Feri.


More information about the Syslinux mailing list