我最近一直在使用SWIG工作,以便用C ++创建新的Lua模块。我在Mac OS(El Capitan)下工作。让我一步一步解释我的所作所为:
1)创建.cpp文件
int myAddition(int x, int y)
{
return (x+y);
}
int mySubtraction(int x, int y)
{
return (x-y);
}
2)创建接口文件(.i):
%module test
%{
extern int myAddition(int x, int y);
extern int mySubtraction(int x, int y);
%}
extern int myAddition(int x, int y);
extern int mySubtraction(int x, int y);
3)使用以下命令创建包装器和共享库:
swig -c++ -lua test.i
g++ -I/usr/local/include -c test_wrap.cxx -o test_wrap.o
g++ -c test.cpp -o test.o
g++ -bundle -L/usr/local/lib/ -llua test_wrap.o test.o -o test.so
4)我创建一个.lua文件来测试新模块:
require("test")
print(test.myAddition(10,40))
print(test.mySubtraction(20,40))
脚本的输出如下:
50.0 -20.0 lua(21360,0x7fff7b739000)malloc: *对象0x10d86b998的错误:释放的指针未分配 * 在malloc_error_break中设置断点以进行调试 中止陷阱:6
如果我将脚本更改为以下内容:
require("test")
print(test.myAddition(10,40))
print(test.mySubtraction(20,40))
os.exit()
,一切似乎都很好:
[输出] 50.0 -20.0
您是否发现了任何问题,或者在脚本完成后是否真的需要调用os.exit()?
编辑:Lua版本是5.3.2。输出 g ++ -Wl --verbose -bundle -I / usr / local / include / -L / usr / local / lib / -llua test_wrap.o test.o -o test.so 如下:Apple LLVM 7.0.2版(clang-700.1.81) 目标:x86_64-apple-darwin15.3.0 线程模型:posix “/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld”-demangle -dynamic -arch x86_64 -bundle -macosx_version_min 10.11.0 -syslibroot /Applications/Xcode.app/Contents/Developer /Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -o test.so -L / usr / local / lib / -llua test_wrap.o test.o -lc ++ -lSystem /Applications/Xcode.app/Contents /Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin /../ LIB /铛/ 7.0.2 / LIB /达尔文/ libclang_rt.osx.a