将SWIG应用于C ++时,f1(const char * str)与f1(char * str)不同吗?

时间:2015-04-01 10:14:15

标签: python c++ swig

我正在应用SWIG将C ++库转换为Python库。

我有一个头文件和一个源文件(省略了一些简单的东西):

test.h

void f1(char* str);

test.cc

void f1(const char* str) {
    /* do something */
}

当我构建它时,它不会抛出任何关于这种不匹配的错误或警告。

但是当我在Python中导入SWIG生成的模块时:

>>> import (MYMODULE)
 ImportError: /usr/local/lib/libMYMODULE.so: undefined symbol: _ZN2f14str12iii

发生上述错误。

但是,在修复标题和来源以使用相同的参数 const char* str 之后,错误已经解决。

我想知道的是,为什么C ++编译器和构建器不会抛出错误或警告,把这个东西变成SWIG和Python中的问题。

1 个答案:

答案 0 :(得分:2)

确实,char*const char*是不同的类型。

您已声明了两个重载函数,并且只定义了一个。这不是错误,只要您不试图调用或以其他方式使用未定义的错误。如果这样做,您将收到链接时错误;因为你已经构建了一个动态库,只有在加载库时才能检测到它 - 在这种情况下,是由你的Python解释器。