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

Is f1(const char* str) different from f1(char* str) when applying SWIG to C++?

本文关键字:str char f1 是否 const 应用于 SWIG C++      更新时间:2023-10-16

我正在应用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中的一个问题。

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

您已经声明了两个重载函数,但只定义了一个。这不是一个错误,只要你不试图调用或以其他方式使用未定义的。如果你这样做,你会得到一个链接时间错误;由于您已经构建了一个动态库,因此只有在加载库时才会检测到它——在本例中,是由Python解释器检测到的。