为 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到同一个库,因为否则 坏事 会发生(例如,会有两组静态变量)。
有两种常见的方法可以实现这些要求。
- 将 Lua API 编译为共享 library/DLL 和 link 解释器和此共享库的扩展模块。这是在 Windows.
上采用的方法
- 将LuaAPI编译为静态库并link它给解释器,但要确保解释器重新导出 Lua API。这样,扩展模块在加载时就可以访问。这是 Unix 平台上通常采用的方法。构建解释器时需要
-Wl,-E
linker 标志。
由于您似乎 运行 一个 Unixoid OS,您的第一种方法可能是正确的(因为您的解释器可能会重新导出 Lua API已经),第二种方法将在 Lua API 中 link 两次。
请帮助我了解 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到同一个库,因为否则 坏事 会发生(例如,会有两组静态变量)。
有两种常见的方法可以实现这些要求。
- 将 Lua API 编译为共享 library/DLL 和 link 解释器和此共享库的扩展模块。这是在 Windows. 上采用的方法
- 将LuaAPI编译为静态库并link它给解释器,但要确保解释器重新导出 Lua API。这样,扩展模块在加载时就可以访问。这是 Unix 平台上通常采用的方法。构建解释器时需要
-Wl,-E
linker 标志。
由于您似乎 运行 一个 Unixoid OS,您的第一种方法可能是正确的(因为您的解释器可能会重新导出 Lua API已经),第二种方法将在 Lua API 中 link 两次。