我正在使用swig生成一个python C ++接口,这样我就可以在python中创建脚本来调用我的c ++函数。我已经达到了:
swig -c++ python filename.i
gcc -c filename.cpp filename_wrap.cxx -shared -Ic:\includepath
包含路径是我的python27的包含目录。
尝试使用gcc编译时,我得到了一大堆错误,说明我的许多函数都被声明为extern,现在是静态的。在原始的cpp文件中,我将一些函数声明为static。我从来没有宣称任何东西。这可能是由什么引起的?
这是我的界面文件
/* Interface */
%module ReadWrite
%{
#include "ReadWrite.h"
%}
%include "ReadWrite.h"
一个头文件片段(名称已更改)看起来像这样(没有任何内容声明为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:错误:'bool myfunc3(type2 * Data,type3 ** Records,type2 ** Header)'被声明为'extern',后来被称为'static'
答案 0 :(得分:5)
它们作为原型出现在标题中的事实隐含地将它们定义为extern函数。但是你也要声明它们是静态的。
考虑到C ++标签,我将在这里做出一个假设,所以请原谅我,如果你已经知道这一点,它就会成为光顾。 C中的static
做的事情完全与C ++不同。在C ++中,static
表示特定方法不属于类的实例,任何人都可以随时调用它。在C中,static
关键字表示“此功能仅在此文件的范围内可见”。因此,当您声明某些静态内容时,您基本上禁止该文件之外的任何人使用它(将其视为等同于private
的C)。
因此,如果这不是您的意图,请不要将其声明为静态。