为 LuaJit 构建 C 库

C library build for LuaJit

请帮助我了解 luajit 的构建过程。

如果我想编译一个 c 库,我使用这个代码:

gcc -shared -fpic -O -I/path-to-luajit-headers/luajit-2.1  mylib.c -o mylib.so

是否需要像这样使用更具体的参数:

gcc -shared -fpic -O -I/path-to-luajit-headers/luajit-2.1 -L/path-to-luajit/lib mylib.c -o mylib.so -lluajit-2.1

在第二种情况下,.so 文件比第一种大两倍。有什么不同?使用 -lluajit-2.1 等是否重要?可能有更多参数来定义 luajit 模式而不是纯 lua 构建模式?

解释器需要访问LuaAPI,C扩展模块需要访问LuaAPI,两者都需要link到同一个库,因为否则 坏事 会发生(例如,会有两组静态变量)。

有两种常见的方法可以实现这些要求。

  1. 将 Lua API 编译为共享 library/DLL 和 link 解释器和此共享库的扩展模块。这是在 Windows.
  2. 上采用的方法
  3. 将LuaAPI编译为静态库并link它给解释器,但要确保解释器重新导出 Lua API。这样,扩展模块在加载时就可以访问。这是 Unix 平台上通常采用的方法。构建解释器时需要 -Wl,-E linker 标志。

由于您似乎 运行 一个 Unixoid OS,您的第一种方法可能是正确的(因为您的解释器可能会重新导出 Lua API已经),第二种方法将在 Lua API 中 link 两次。