【问题标题】:SWIG error: was declared 'extern' and later 'static'SWIG 错误:被声明为“外部”,后来被声明为“静态”
【发布时间】:2011-06-10 17:08:30
【问题描述】:

我正在使用 swig 生成一个 python C++ 接口,这样我就可以在 python 中编写脚本来调用我的 c++ 函数。我已经做到了:

swig -c++ python filename.i

gcc -c filename.cpp filename_wrap.cxx -shared -Ic:\includepath

包含路径是我的python27的包含目录。

在尝试使用 gcc 编译时,我收到一大堆错误,说明我的许多函数被声明为 extern 而现在是静态的。在原始的 cpp 文件中,我将我的一些函数声明为静态的。我从来没有将任何东西声明为外部。这可能是什么原因造成的?

这是我的接口文件

/*  Interface */
%module ReadWrite
%{
    #include "ReadWrite.h"

%}
%include "ReadWrite.h"

头文件的 sn-p(名称已更改)如下所示(没有任何东西被声明为 extern)

static bool myfunc1(void);

static bool myfunc2 (type1 *Entry, type2 *Block, type2 *Data);

static bool myfunc3 (type2 *Data, type3 **Records, type2 **Header);

type4 myfunc4 (void) ;

当我执行 gcc -c ReadWrite.cpp ReadWrite_wrap.cxx -shared -Ic:\includepath 时,我会收到来自 gcc: 之类的错误:

ReadWrite.cpp:682:79: error: 'bool myfunc3 (type2 *Data, type3 **Records, type2 **Header)' 被声明为 'extern' 和后来的 'static'

【问题讨论】:

  • 如果没有一些有问题的代码的 sn-ps,我认为不可能做出合理的猜测。
  • 将代码添加到主帖。片刻。
  • 是的,但甚至可能是确切的编译器错误?

标签: c++ python c swig


【解决方案1】:

它们作为原型出现在标题中的事实隐含地将它们定义为外部函数。但是,您也将它们声明为静态的。

鉴于 C++ 标记,我将在这里做一个假设,所以如果你已经知道这一点,请原谅我,并且它被视为光顾。 C 中的static 所做的事情完全 与 C++ 不同。在 C++ 中,static 表示特定方法不属于类的实例,任何人都可以随时调用。在 C 中,static 关键字的意思是,“这个函数只在这个文件的范围内可见”。因此,当您声明静态内容时,您基本上是在禁止该文件之外的任何人使用它(将其视为 C 中的 private 等价物)。

因此,如果这不是您的意图,请不要将其声明为静态。

【讨论】:

  • 啊,别担心。非常感谢你帮助我。正如您可能知道的那样,我对这一切都很陌生,我正在尝试熟悉 Visual Studios 10 之外的工具。我实际上已经在头文件中声明了一些非静态的东西,就像静态的一样。
  • 非常感谢耐心和清晰的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多