请帮助我理解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构建模式吗?
答案 0 :(得分:1)
解释器需要访问Lua API,C扩展模块需要访问Lua API,并且都需要链接到同一个库,因为否则会发生坏事(例如是两组静态变量。)
有两种常见的方法可以达到这些要求。
-Wl,-E
链接器标志。由于您似乎运行的是Unixoid OS,因此您的第一种方法可能是正确的(因为您的解释器可能已经重新导出Lua API),第二种方法将在Lua API中链接两次。