0
我通過Ubuntu安裝libboost。升級版本是1.42。 我跟着加速網站上的例子:我需要爲Boost.Python定義一個PyMODINIT_FUNC來公開一個C++類嗎?
#include <string>
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
然後創建的IDL:
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
,並與建設的bjam它:
using python ;
lib libboost_python : : <name>boost_python ;
project
: requirements <library>libboost_python
;
python-extension world : world.cpp ;
但只要我進口世界,我得到:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import world
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initworld)
>>>
我猜它在尋找這樣一個功能:
PyMODINIT_FUNC initworld(void) {
...
}
但我不應該的Boost.Python創建此?該函數是否正在生成,但未找到?或者我需要自己寫嗎?
我知道它真的試圖導入生成的模塊,因爲它從另一個目錄執行時會給出不同的錯誤。
jsna[email protected]:~/Dropbox/flycap/pytest$ bjam
...found 10 targets...
...updating 5 targets...
MkDir1 bin
MkDir1 bin/gcc-4.5.2
MkDir1 bin/gcc-4.5.2/debug
gcc.compile.c++ bin/gcc-4.5.2/debug/world.o
gcc.link.dll bin/gcc-4.5.2/debug/world.so
...updated 5 targets...
[email protected]:~/Dropbox/flycap/pytest$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import world
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named world
>>>
在正確的目錄:
[email protected]:~/Dropbox/flycap/pytest$ cd bin/gcc-4.5.2/debug/
[email protected]:~/Dropbox/flycap/pytest/bin/gcc-4.5.2/debug$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import world
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initworld)
你能檢查python是否真的試圖導入boost :: python模塊生成的模塊嗎? 嘗試使其名稱唯一,以便路徑中不存在具有相同名稱但具有另一個擴展名的其他文件。 –
是,其導入正確的文件。我試圖在該目錄中刪除目標文件,只保留.so文件作爲唯一的文件,並得到相同的結果。 – nont