我正在应用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。
发布于 2015-04-01 11:07:17
事实上,char*和const char*是不同的类型。
您已经声明了两个重载函数,并且只定义了一个。这不是一个错误,只要您不尝试调用或以其他方式使用未定义的错误。如果这样做,您将得到一个链接时错误;因为您已经构建了一个动态库,只有在加载库时才会检测到这个错误--在本例中,是由Python解释器检测的。
https://stackoverflow.com/questions/29388143
复制相似问题