因工作需要,得在Python里调用C++的库。Boost.Python是个好东西,导出C++的类和函数都很方便。但有些细微处稍不留意,很容易掉坑里爬不出来。即便使用过很久了,自己昨天还是因疏忽掉坑了,特此纪念一下。
由于是个比较简单的包,代码不多,编译时一条WARNING都没有就过了。但在Python中 import 编译好的C++库时,报下面的错:dynamic module does not define init function boost
检查了代码好多遍,才终于发现:BOOST_PYTHON_MODULE(CppLib)
这儿对CppLib的名称要求必须与编译完成的库文件名一致(不用后缀)。比如,我编译后的库文件名为“libCppLib.so”,但BOOST_PYTHON_MODULE处习惯性写成了“CppLib”,然后在Python中“import libCppLib”时,就会出现找不到 init 函数的报错(可以理解为名字空间不匹配了)。
爬坑总结:BOOST_PYTHON_MODULE中的名字必须和编译后生成的库文件名相一致。
转载本文请联系原作者获取授权,同时请注明本文来自邹佳恒科学网博客。
链接地址:http://blog.sciencenet.cn/blog-3287381-1042118.html