Python,SWIG and libjvm

Graham Dumpleton Graham.Dumpleton at
Fri Sep 21 03:03:36 CEST 2007

On Sep 21, 9:00 am, sapsi <saptarshi.g... at> wrote:
> Hello,
> 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/", line 7, in ?
>     import _hdfs
> ImportError: cannot open shared object file: No such file
> or directory
> However, 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
> 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
> Saptarshi
> Attachments:
> SWIG template
> %module pyhdfs
> %{
> #include "hdfs.h"
> %}
> %include "hdfs.h"

Your isn't being found because it isn't in a standard system
library directory. You have a few choices to solve this:

1. Install 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:

  export LD_RUN_PATH

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 mailing list