Hi Nathann,

Library files contain information about what they contain. So Sage
reads all the library files it has access to (presumably this only
happens once at startup) and selects the right one.

Cheers
Bjarke

On 29 Jun., 17:27, Nathann Cohen <nathann.co...@gmail.com> wrote:
> Hello !
>
> Thank you for you answer though I still have one disturbing question :
>
> If I have one header file named XXXXXX.h and one library file named
> FFFFFFF.so, how on earth can Cython know that the function defined in
> XXXXXXX.h is to be found in FFFFFFF.so ?
>
> Thanks again ! :-)
>
> Nathann
>
> On Jun 29, 12:17 pm, Simon King <simon.k...@uni-jena.de> wrote:
>
> > Hi William, hi Nathann,
>
> > On 29 Jun., 11:43, William Stein <wst...@gmail.com> wrote:
>
> > > > I have a C program without a makefile which is meant to be used from
> > > > the command line, and I would like to interface it with SAGE. I have
> > > > been told this should be done through libraries, and I do not have the
> > > > slightest idea of how it works in Cython. I just read those two
> > > > pages :
>
> > > >http://docs.sun.com/source/819-3690/Building.Libs.html
> > > >http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html
>
> > > > They explain well enough how to build libraries with gcc, but I do not
> > > > know how to access their functions with Cython.
> > ...
>
> > > Can you carefully try the examples and read the code here
>
> > >http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html#MORE-...
>
> > I understood that Nathann knows how to build libraries with gcc, but
> > that he needs help on using them in Cython.
>
> > I thinkhttp://docs.cython.org/docs/external_C_code.htmlmighthelp.
>
> > In a nutshell: You need to declare the C-types/functions/... in your
> > Cython program (this can be done in a .pxd-file, which is analogous to
> > a header file in C). The above page will tell you the differences in
> > syntax.
>
> > I try a brief example, hoping that I do not do too many mistakes.
> > Let bar.h be
> >   long foo(char*);
> > and let the function foo be defined somewhere, resulting in a static
> > library bar.a.
>
> > Your Cython code (say, wrapbar.pyx) must then do something like this:
> > cdef extern from "bar.h":
> >     long foo(char*)
> > def  test(s):
> >     if isinstance(s, basestring):
> >         return foo(s)
> >     raise TypeError
>
> > Running "sage -cython wrapbar.pyx" results in a C-file for your Cython
> > file. Then, you compile it, link against bar.a, and produce a shared
> > library wrapbar.so.
>
> > Then, in sage, you can do
> >   sage: from wrapbar import test
> > and use the function. If I am not mistaken, the conversion from a
> > python string to char* is automatically done.
>
> > Best regards,
> >    Simon
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to