使用SWIG for C ++和Lua中止陷阱

时间:2016-01-27 12:59:15

标签: c++ lua swig

我最近一直在使用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

0 个答案:

没有答案