Extend Lua with custom C functions using Clang

note, May 23, 2023 on Mitja Felicijan's blog

Here is a boilerplate for extending Lua with custom C functions. This requires -Clang and Lua 5.1 to be installed. GCC can be used instead of Clang, but the -Makefile will need to be modified.

  • nativefunc.c

    #include <lua.h>
    -#include <lauxlib.h>
    -
    -static int l_mult50(lua_State *L) {
    -  double number = luaL_checknumber(L, 1);
    -  lua_pushnumber(L, number * 50);
    -  return 1;
    -}
    -
    -int luaopen_nativefunc(lua_State *L) {
    -  static const struct luaL_Reg nativeFuncLib[] = {{"mult50", l_mult50}, {NULL, NULL}};
    -
    -  luaL_register(L, "nativelib", nativeFuncLib);
    -  return 1;
    -}
    -
  • main.lua

    require "nativefunc"
    -print(nativelib.mult50(50))
    -
  • Makefile

    CC       = clang
    -CFLAGS   =
    -INCLUDES = `pkg-config lua5.1 --cflags-only-I`
    -
    -all:
    -  $(CC) -shared -o nativefunc.so -fPIC nativefunc.c $(CFLAGS) $(INCLUDES)
    -
    -clean:
    -  rm *.so
    -