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.htmlmight help. > > 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 -~----------~----~----~----~------~----~------~--~---