[Numpy-discussion] Calling routines from a Fortran library using python

Dag Sverre Seljebotn dagss at student.matnat.uio.no
Thu Feb 18 09:32:12 EST 2010


David Cournapeau wrote:
> On Thu, Feb 18, 2010 at 10:22 PM, Nils Wagner
> <nwagner at iam.uni-stuttgart.de> wrote:
>   
>> On Thu, 18 Feb 2010 11:55:07 +0100
>>  Matthieu Brucher <matthieu.brucher at gmail.com> wrote:
>>     
>>>> Ok I have extracted the *.o files from the static
>>>> library.
>>>>
>>>> Applying the file command to the object files yields
>>>>
>>>> ELF 64-bit LSB relocatable, AMD x86-64, version 1
>>>> (SYSV),
>>>> not stripped
>>>>
>>>> What's that supposed to mean ?
>>>>         
>>> It means that each object file is an object file
>>> compiled with -fPIC,
>>> so you just have to make a shared library (gfortran
>>> -shared *.o -o
>>> libmysharedlibrary.so)
>>>
>>> Then, you can try to open the library with ctypes. If
>>> something is
>>> lacking, you may have to add -lsome_library to the
>>> gfortran line.
>>>
>>> Matthieu
>>> --
>>> Information System Engineer, Ph.D.
>>> Blog: http://matt.eifelle.com
>>> LinkedIn: http://www.linkedin.com/in/matthieubrucher
>>>       
>> O.k. I tried
>>
>> gfortran -shared *.o -o libmysharedlibrary.so
>>
>> /usr/bin/ld: dxop.o: relocation R_X86_64_32 against `a
>> local symbol' can not be used when making a shared object;
>> recompile with -fPIC
>>     
>
> The message is pretty explicit: it is not compiled with -fPIC, there
> is nothing you can do, short of requesting a shared library from the
> software vendor.
>   
Well, I think one can make a static executable with C or Cython and 
embed the Python interpreter. But it is pretty complicated stuff, and 
requesting a shared library is vastly preferable.

Dag Sverre




More information about the NumPy-Discussion mailing list