[[email protected] python]$ cat hello_world.cc
#include <string>
#include <Python.h>
#include <boost/python.hpp>
namespace {
std::string greet() { return "Helloworld"; }
}
using namespace boost::python;
BOOST_PYTHON_MODULE(hello_world)
{
def("greet",greet);
}
[[email protected] python]$ g++ -c -fPIC hello_world.cc -I/path/to/boost/headers -I/path/to/python/headers -o hello_world.o
[[email protected] python]$ g++ -shared -Wl,-soname,libhello_world.so -o libhello_world.so hello_world.o
[[email protected] python]$ python
Python 2.7.1 (r271:86832, Jan 10 2011, 09:46:57)
[GCC 3.4.5 20051201 (Red Hat 3.4.5-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append('.')
>>> import hello_world
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named hello_world
>>>
Creé el archivo .so como se muestra arriba, pero no puedo importar dentro de python. ¿Qué me estoy perdiendo?Cómo importar el módulo python desde el archivo .so?
gracias. Ahora obtengo 'ImportError: ./hello_world.so: undefined symbol: _ZNK12boost_1_47_06python7objects21py_function_impl_base9max_arityEv' – balki
@balki: No estableciste un enlace con Boost.Python. –
Me vinculé contra boost_python, ahora obtengo 'ImportError: libboost_python: no se puede abrir el archivo de objeto compartido: No existe dicho archivo o directorio'. Si exporto 'LD_LIBRARY_PATH =/path/to/boost_python_lib', funciona bien. ¿Cómo especifico en cmdline? – balki