Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用SWIG创建倍频程文件_C_Swig_Octave - Fatal编程技术网

C 使用SWIG创建倍频程文件

C 使用SWIG创建倍频程文件,c,swig,octave,C,Swig,Octave,我正在尝试使用SWIG创建一个倍频程函数。但即使是最基本的示例代码似乎在我有机会进入八度之前就失败了。我不确定我是否应该担心SWIG为C++源文件(.cxx)创建了一个扩展类型,它生成MKOCTFILE不识别(它只占用.cpp.cc,它看起来像SWIG分配的那么多,并且创建了一个看起来像是一个扩展的C++,它不支持)。 任何有更多经验的人的帮助都将不胜感激 我所做的步骤如下: swig -octave swig_test.i mv swig_test_wrap.cxx swig_test_wra

我正在尝试使用SWIG创建一个倍频程函数。但即使是最基本的示例代码似乎在我有机会进入八度之前就失败了。我不确定我是否应该担心SWIG为C++源文件(.cxx)创建了一个扩展类型,它生成MKOCTFILE不识别(它只占用.cpp.cc,它看起来像SWIG分配的那么多,并且创建了一个看起来像是一个扩展的C++,它不支持)。 任何有更多经验的人的帮助都将不胜感激

我所做的步骤如下:

swig -octave swig_test.i
mv swig_test_wrap.cxx swig_test_wrap.cpp <--- This is necessary because mkoctfile doesn't recognize the cxx type c++ code that swig generates
mkoctfile swig_test_wrap.cpp
我古怪的basicswig_test.c的源代码

int fact(int n) {
  if (n <= 1) return 1;
  else return n*fact(n-1);
}

int my_mod(int x, int y) {
   return (x%y);
}
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

更新:2011年5月9日

所以我仍然没有找到解决办法,我开始怀疑这些程序是否过时了?文档当然是。举个例子:说明书上说

 swig -octave swig_test.i -o swig_test_wrap.cxx
不管怎样,这肯定不会起作用,因为mkoctfile不会像前面所说的那样采用cxx类型。而且,这个命令在物理上写错了。如上所述,它返回错误

 swig error : unrecognized option example.i
 use swig -help for available options
该命令应输入为:

 swig -octave -o swig_test_wrap.cpp swig_test.i
这将生成swig_test_wrap.cpp文件,就像广告一样。我本以为在swig的argv中会有一个输入文件的-I选项,但是,现在我知道了顺序在这里很重要,当他们更改了有关函数如何工作的某些内容时,一定有人没有更新文档

现在,在运行这个命令之后,我有了swig_test_wrap.cpp文件。下一步,我拿着它试着执行

mkoctfile swig_test_wrap.cpp swig_test.c
同样,我得到了与上面相同的错误:“无效的协变返回类型”等等,但是我也得到了一个swig_test.o文件。只是为了好玩,我就跑了

mkoctfile swig_test.o
瞧,这确实生成了一个名为swig_test.oct的文件。然而,当我进入八度音阶并试图通过运行

octave:1>swig_test
我得到响应错误:“swig_test”在第1行第1列附近未定义

就我所知,我又回到了原点。有人有什么想法吗

试试看:

$ swig -octave -c++ swig_test.i -o swig_test_wrap.cxx
$ mkoctfile swig_test_wrap.cxx swig_test.c

如前所述。

因此,这个问题与我使用的八度音阶版本有关。Octave版本3.4.0似乎还不能与swig一起使用。我在SourceForge上得到了帮助,一旦我降级到版本3.2.4-r3,它就可以完美地工作

这是您必须使用的已知错误:

swig -octave -o WRAPFILE.cpp INPUT.i

和MKOCTFILE的一个问题,就是必须使用.CPP扩展,因为它们应该接受.cxx扩展,因为它是C++文件的有效扩展。 当我尝试执行第一行时,我得到的响应是“swig error:Unrecognized option swig_test.I,使用'swig-help'获取可用选项”。然后,如果我去掉-o swig_test_wrap.cxx,它就会工作(有点),并且它会生成文件swig_test_wrap.cxx。但是如果我尝试运行第二行(在文件上保留.cxx扩展名),我会得到响应:“mkoctfile:unrecognedargumenttest\u file\u wrap.cxx”。我做错什么了吗?有错误版本的swig或mkoctfile我不敢相信它不会采用-o选项,并坚持生成类型为的不可导入文件。cxxSorry,我现在无法进一步帮助。感谢您的努力,非常感谢!
$ swig -octave -c++ swig_test.i -o swig_test_wrap.cxx
$ mkoctfile swig_test_wrap.cxx swig_test.c
swig -octave -o WRAPFILE.cpp INPUT.i