首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向LuaJit的C库构建

面向LuaJit的C库构建
EN

Stack Overflow用户
提问于 2016-04-30 18:50:09
回答 1查看 807关注 0票数 0

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

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

代码语言:javascript
复制
gcc -shared -fpic -O -I/path-to-luajit-headers/luajit-2.1  mylib.c -o mylib.so

是否需要使用更具体的参数,如:

代码语言:javascript
复制
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构建模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 22:04:17

解释器需要访问Lua,C扩展模块需要访问Lua,两者都需要链接到同一个库,因为否则会发生糟糕的事情(例如,会出现两组静态变量)。

实现这些需求有两种常见的方法。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36958862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档