[cffi-devel] Linking CL to fortran-77 via cffi

Mirko Vukovic mirko.vukovic at gmail.com
Tue Jan 3 19:27:08 UTC 2012


On Tue, Jan 3, 2012 at 2:10 PM, Martin Simmons <martin at lispworks.com> wrote:

> >>>>> On Thu, 29 Dec 2011 21:19:15 -0500, Mirko Vukovic said:
> >
> > Hello,
> >
> > Several projects (lla, blapack among them) link common lisp (cl) to
> fortran
> > 77 (f77)code.  Unfortunately, being totally unfamiliar with cffi, I was
> > having trouble using those packages to learn how to link cl to other f77
> > code.
> >
> > To learn more about calling f77 code from CL, I assembled a bunch of
> simple
> > examples (using cygwin+clisp+gfortran).to show how to pass values of
> > various types to f77.
> >
> > I have put up the examples on https://github.com/mirkov/cffi-f77.  I
> tried
> > to add enough documentation to make the package easily understandable.
> >
> > I hope this proves useful to others.  I would appreciate comments
> regarding
> > errors and improvements.
>
> I tested the code in LispWorks on 64-bit Linux and found the following
> changes
> useful.
>
> Avoid hardwired paths:
>
> diff --git a/library-ops.lisp b/library-ops.lisp
> index 63358e1..2c2e6b9 100755
> --- a/library-ops.lisp
> +++ b/library-ops.lisp
> @@ -27,7 +27,7 @@
>  (defun link-lib ()
>   "Link to the foreign library"
>   (setf *lib*
> -       (load-foreign-library
> #P"/home/977315/my-software-add-ons/my-lisp/cffi+f77/library.dll")))
> +       (load-foreign-library (asdf:system-relative-pathname "cffi+f77"
> "library.dll"))))
>
>  (defun unlink-lib ()
>   "Unlink from the foreign library"
>
>
> Need -fPIC for successful linking on 64-bit Linux:
>
> diff --git a/makefile b/makefile
> index 3db9e80..1b542d6 100755
> --- a/makefile
> +++ b/makefile
> @@ -3,7 +3,7 @@ fortran = gfortran
>  objs = simple_example.o subroutines.o
>
>  %.o : %.f
> -       $(fortran) -c $< -o $@
> +       $(fortran) -c -fPIC $< -o $@
>
>  special : clean
>  clean :
>
>
> Enhancement to the instructions:
>
> diff --git a/readme.org b/readme.org
> index 9729387..b216a9d 100755
> --- a/readme.org
> +++ b/readme.org
> @@ -73,5 +73,6 @@ make library.dll
>
>   The examples correctness can be verified by running unit tests:
>  #+begin_src lisp
> +(in-package #:cffi+f77)
>  (run-tests)
>  #+end_src
>
>
> __Martin
>
> _______________________________________________
> cffi-devel mailing list
> cffi-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
>

Cool, thank you.  You removed at least one of my to-do items :-)

I am currently working on setting it up on 64-bit sbcl on redhat linux.

Mirko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20120103/edc0d2c5/attachment.html>


More information about the cffi-devel mailing list