LuaJit的C库构建

时间:2016-04-30 18:50:10

标签: lua compilation 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构建模式吗?

1 个答案:

答案 0 :(得分:1)

解释器需要访问Lua API,C扩展模块需要访问Lua API,并且都需要链接到同一个库,因为否则会发生坏事(例如是两组静态变量。)

有两种常见的方法可以达到这些要求。

  1. 将Lua API编译为共享库/ DLL,并将解释器和扩展模块链接到此共享库。这是在Windows上采用的方法。
  2. 将Lua API编译为静态库并将其链接到解释器,但请确保解释器重新导出 Lua API。这样,扩展模块在加载时就可以访问。这是Unix平台上通常采用的方法。构建解释器时需要-Wl,-E链接器标志。
  3. 由于您似乎运行的是Unixoid OS,因此您的第一种方法可能是正确的(因为您的解释器可能已经重新导出Lua API),第二种方法将在Lua API中链接两次。