Import Error on boost python hello program
include
using namespace boost::python;
struct World{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
Compile and build ok
~/boost$ g++ -fPIC -I/usr/include/python2.6 -c hello.cpp
~/boost$ g++ -shared hello.o -o hello.so
But when import from python side, got error.
>>> import hello.so
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./hello.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
&开发者_如何学Cgt;>>
Solved this via "No such file or directory" error with Boost Python
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
did the trick for me. I hope this is as clear as possible as i was struggling with this for about half an hour now ;)
same as other post here
g++ -c -fPIC hello.cpp -o hello.o
g++ -shared -Wl,-soname,hello.so -o hello.so hello.o -lpython2.6 -lboost_python
But i want to stress the importance of the position of "-lpython2.6 -lboost_python". If you put them in front of input files (hello.o), they will be somehow ignored (not linked to the final hello.so). This is at least true for g++ (Ubuntu/Linaro 4.6.3-1ubuntu5).
To be simple, http://ubuntuforums.org/showthread.php?t=496287 suggested:
g++ <.cpp or .o file(s)> [LDFLAGS] [LIBS] -o [appname]
Oh, I just saw this post:
help needed with boost python
and problem solved
I had the same issue and it turned out that I was missing a constructor on my class.
精彩评论