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

标签 python c++ swig

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

我有一个头文件和一个源文件(省略一些琐碎的东西):

测试.h

void f1(char* str);

测试.cc

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

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

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

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

出现如上错误

但是,在将 header 和源代码修复为具有相同参数 const char* str 之后,错误已解决。

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

最佳答案

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

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

关于python - 将 SWIG 应用于 C++ 时,f1(const char* str) 与 f1(char* str) 是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29388143/

相关文章:

python - Reportlab - 如果段落对于一行来说太长,如何引入换行符

c++ - 在 Mac OS X 上使用现代 OpenGL

c++ - 如何处理我的 C++ __getitem__ 函数中的切片(由 SWIG 使用)

python - 如果随机数悬停元素

python - AWS boto 和 boto3 有什么区别

python - 从不规则间隔的向量中选择近似规则的样本

python 中的 C++ 方法重载

C++ - 错误 C2568 - 表达式必须具有整数或无作用域的枚举类型

python - SWIG Python undefined symbol 错误

javascript - 用于 JavaScript 的 SWIG : "Module did not self-register." on load