两个问题:
1. 动态连接库 编译时, 调用静态连接库的东西 ,然后链接 静态连接库 OK
2. lua 编译 C模块是,出现 x64 X32, fPIC的问题时, 需要把 lua lib(.a)重新编译一遍(fPIC)的方式。
fPIC 可以用于 静态连接库 和动态连接库的编译。
原理:
因为编译 lua 的C模块时,需要编译成 so,而 c模块又依赖 liblua.a,
链接 静态库时,必须吧所有代码copy报自己的模块中
所以 liblua.a中的代码要想存在于c模块中,必须使用-fPIC重新编译。
即:
最终代码中存在两部分: 自己写的代码 + lua.a的代码; 最终代码是动态连接库,所以必须将liblua.a 编译为fPIC的静态连接库
所以: 如果编译的C模块不是在 lua的解释器中,使用require 来loadlib,则可以不需要fPIC的方式编译liblua.a
case 为:
C---> main start --call c module->[ lua.script start - ----Use the module code-------> --lua.script -end ]---> main end
这种case下可以直接编译静态链接库,不需要fPIC