Python,SWIG and libjvm
Graham.Dumpleton at gmail.com
Fri Sep 21 03:03:36 CEST 2007
On Sep 21, 9:00 am, sapsi <saptarshi.g... at gmail.com> wrote:
> I'm not sure if this the correct list but here goes (and sorry for the
> noise). I've been attempting to wrap python around libhdfs.
> So far so good (i've attached the SWIG template at the end). The
> compilation works without errors and the shared objects do have
> references to all the functions.
> However, when importing into python
> import pyhdfs
> i get the following error:
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "/home/sguha/tmp/b/hdfs.py", line 7, in ?
> import _hdfs
> ImportError: libjvm.so: cannot open shared object file: No such file
> or directory
> However, libjvm.so is located in /home/sguha/mine/jdk1.6.0_02/jre/lib/
> amd64/server which is present in the PYTHONPATH and sys.path.
> I can understand it complaining <i>while</i> loading the libjvm.so
> but python doesn't locate it even when in the path.
> As an aside, the build command for hdfs.c has " -ljvm " - this
> should affect SWIG, right? Meaning if my program (e.g) links to a
> library and i want a wrapper around my program (to python) i need SWIG
> templates for my headers only and not for the linked library...right?
> ( I guess the answer is i dont otherwise that would be quite a
> nightmare of work)
> Thank you for your time
> SWIG template
> %module pyhdfs
> #include "hdfs.h"
> %include "hdfs.h"
Your libjvm.so isn't being found because it isn't in a standard system
library directory. You have a few choices to solve this:
1. Install libjvm.so into /lib or /usr/lib. You may be able to get
away with putting it in /usr/local/lib if your OS is setup to look
2. If a Linux/Solaris box, do:
then run your application. This will tell you application to look in
that directory for the shared library at run time.
3. If on Linux/Solaris, compile that library directory into the Python
module .so by setting before you compile your Python module:
This only needs to be done at compile time, but means your module will
always expect it to be in that location.
More information about the Python-list