ctypes: loading .so file on Linux

Uwe Schmitt rocksportrocker at googlemail.com
Wed Aug 27 04:26:01 EDT 2008


On 27 Aug., 07:03, Paddy <paddy3... at googlemail.com> wrote:
> On Aug 23, 2:33 pm, Paddy <paddy3... at googlemail.com> wrote:
>
>
>
> > Hi,
> > I am am falling at the first hurdle when trying to access a library
> > using ctypes.
>
> > I have a file libucdb.so which the file command says is shared object,
> > but I cannot get it to load:
>
> > Any help would be appreciated:
>
> > dmccarthy: file /opt/questasim_6.4/questasim/linux/libucdb.a /opt/
> > questasim_=
> > 6.4/questasim/linux/libucdb.so
> > /opt/questasim_6.4/questasim/linux/libucdb.a:  current ar archive
> > /opt/questasim_6.4/questasim/linux/libucdb.so: ELF 32-bit LSB shared
> > object,=
> >  Intel 80386, version 1 (SYSV), not stripped
> > dmccarthy: python
> > ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
> > Python 2.5.1 (r251:54863, May  2 2007, 08:46:07)
> > [GCC 3.3.4 (pre 3.3.5 20040809)] on linux2
> > Type "help", "copyright", "credits" or "license" for more information.>>> cdll.LoadLibrary("libc.so.6")
>
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> > NameError: name 'cdll' is not defined>>> from ctypes import *
> > >>> ^[[A^[[A
>
> >     ^e "<stdin>", line 1
> > SyntaxError: invalid syntax>>> cdll.LoadLibrary("libc.so.6")
>
> > <CDLL 'libc.so.6', handle 2a958a2900 at 2a95dda490>>>> cdll.LoadLibrary("libucdb.so")
>
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> >   File "/software/unix-soft/linux/ActivePython-2.5.1.1-linux-x86_64/
> > lib/pyth=
> > on2.5/ctypes/__init__.py", line 423, in LoadLibrary
> >     return self._dlltype(name)
> >   File "/software/unix-soft/linux/ActivePython-2.5.1.1-linux-x86_64/
> > lib/pyth=
> > on2.5/ctypes/__init__.py", line 340, in __init__
> >     self._handle =3D _dlopen(self._name, mode)
> > OSError: libucdb.so: cannot open shared object file: No such file or
> > directo=
> > ry>>> cdll.LoadLibrary("libc.so.6")
>
> > <CDLL 'libc.so.6', handle 2a958a2900 at 2a95df3ad0>>>> libc =3D CDLL("libc.so.6")
> > >>> libc
>
> > <CDLL 'libc.so.6', handle 2a958a2900 at 2a95dda490>>>> libc =3D CDLL("libucdb.so")
>
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> >   File "/software/unix-soft/linux/ActivePython-2.5.1.1-linux-x86_64/
> > lib/pyth=
> > on2.5/ctypes/__init__.py", line 340, in __init__
> >     self._handle =3D _dlopen(self._name, mode)
> > OSError: libucdb.so: cannot open shared object file: No such file or
> > directo=
> > ry>>> libc =3D CDLL("/opt/questasim_6.4/questasim/linux/libucdb.so")
>
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> >   File "/software/unix-soft/linux/ActivePython-2.5.1.1-linux-x86_64/
> > lib/pyth=
> > on2.5/ctypes/__init__.py", line 340, in __init__
> >     self._handle =3D _dlopen(self._name, mode)
> > OSError: /opt/questasim_6.4/questasim/linux/libucdb.so: cannot open
> > shared o=
> > bject file: No such file or directory>>> ^[[A
>
> >   File "<stdin>", line 1
> >     ^
> > SyntaxError: invalid syntax
>
> > - Paddy.
>
> Any help would be appreciated.
>
> Thanks.

What is your current working directory and where is the lib located ?
Maybe the lib is not in your working directory.

If you want the lib accessed from anywhere, you have to copy it
to /usr/lib or /usr/local/lib.
Another possibility is setting LD_LIBRARY_PATH.

Greetings, Uwe



More information about the Python-list mailing list