Google Mail Calendar Documents Reader Web more »
Recently Visited Groups | Help | Sign in
Google Groups Home
compiling C library wrapper
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  5 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Follow-up To:
Add Cc | Add Follow-up to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers that you hear
 
Aaron Bohannon  
View profile   Translate to Translated (View Original)
 More options 5 Nov, 22:32
Newsgroups: fa.caml
From: Aaron Bohannon <bohan...@cis.upenn.edu>
Date: Thu, 05 Nov 2009 22:32:26 UTC
Local: Thurs 5 Nov 2009 22:32
Subject: [Caml-list] compiling C library wrapper
Hi,

I am quite confused by the whole process of compiling and installing
wrappers for C libraries.  It seems like I can get things to work OK
without really knowing what I'm doing if everything is put and built
in a single directory.  The hard part seems to be putting the right
files in the right places and getting the path arguments correct.
Then things stop working, and I have to really understand what's going
on, but the manual doesn't explain this part of the process in any
detail.

Let's say I have a library "/opt/local/lib/libfoo.a" for which I want
to build and use a (native-code) OCaml wrapper.  Here are the steps as
I understand them:

1) Write the file "foo_stubs.c" and compile it to get "foo_stubs.o".

2) Build the library "libfoo_stubs.a" by running

ar rc libfoo_stubs.a foo_stubs.o

3) Copy "libfoo_stubs.a" to its permanent location, let's say,
"/usr/local/lib/ocaml/stubs/libfoo_stubs.a".

4) Write "foo.mli" and use it to build "foo.cmi"

5) Write "foo.ml" and use it to build "foo.cmxa" by running

ocamlopt -a -o foo.cmxa foo.ml
  -ccopt -L/opt/local/lib -cclib -lfoo
  -ccopt -L/usr/local/lib/ocaml/stubs -cclib -lfoo_stubs

6) Copy "foo.cmi" and "foo.cmxa" to their permanent location, let's
say "/usr/local/lib/ocaml/foo/"

7) Write my file "bar.ml" that needs to use the library, and compile
it by running

ocamlopt -I /usr/local/lib/ocaml/foo -o bar foo.cmxa bar.ml

However, this command ends up passing gcc the filename

/usr/local/lib/ocaml/foo/foo.a

which doesn't exist, so I get an error.  Where did this filename come
from?  Where did I go wrong?

 - Aaron

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message, you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
David Allsopp  
View profile   Translate to Translated (View Original)
 More options 5 Nov, 23:10
Newsgroups: fa.caml
From: "David Allsopp" <dra-n...@metastack.com>
Date: Thu, 05 Nov 2009 23:10:46 UTC
Local: Thurs 5 Nov 2009 23:10
Subject: RE: [Caml-list] compiling C library wrapper

Aaron Bohannon wrote:
> I am quite confused by the whole process of compiling and installing
> wrappers for C libraries.  It seems like I can get things to work OK
> without really knowing what I'm doing if everything is put and built
> in a single directory.  The hard part seems to be putting the right
> files in the right places and getting the path arguments correct.
> Then things stop working, and I have to really understand what's going
> on, but the manual doesn't explain this part of the process in any
> detail.

Have a look at ocamlmklib in the manual - if it's available on your platform
then it nicely hides away a lot of this.

<snip - steps 1-4 are fine>

> 5) Write "foo.ml" and use it to build "foo.cmxa" by running

> ocamlopt -a -o foo.cmxa foo.ml
>   -ccopt -L/opt/local/lib -cclib -lfoo
>   -ccopt -L/usr/local/lib/ocaml/stubs -cclib -lfoo_stubs

This command will also build foo.cmx, foo.a and foo.o

> 6) Copy "foo.cmi" and "foo.cmxa" to their permanent location, let's
> say "/usr/local/lib/ocaml/foo/"

You should also copy foo.a to this directory which should fix the problem.
foo.cmxa contains information required by OCaml but the actual code is in
foo.a (as it's been natively compiled). Similarly, .cmx files contain
information which ocamlopt needs but the actual code is in .o (or .obj)
files. For native code, it's a code idea to copy the .cmx files too as it
allows ocamlopt to do some inlining (I think that's right...)

> 7) Write my file "bar.ml" that needs to use the library, and compile
> it by running

> ocamlopt -I /usr/local/lib/ocaml/foo -o bar foo.cmxa bar.ml

This should now work without error.

David

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message, you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Bohannon  
View profile   Translate to Translated (View Original)
 More options 5 Nov, 23:38
Newsgroups: fa.caml
From: Aaron Bohannon <bohan...@cis.upenn.edu>
Date: Thu, 05 Nov 2009 23:38:19 UTC
Local: Thurs 5 Nov 2009 23:38
Subject: Re: [Caml-list] compiling C library wrapper
Ah!  Yes, that's exactly the part I didn't understand and everything
works fine now.  Thank you!

I can't say I completely understand the byte-code case, but I don't
have an urgent need to.

ocamlmklib seems fine, but if it's just a matter of saving keystrokes,
"make" does a pretty good job of that (as long as I know what to tell
"make" to do).

 - Aaron

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message, you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Richard Jones  
View profile   Translate to Translated (View Original)
 More options 7 Nov, 12:26
Newsgroups: fa.caml
From: Richard Jones <r...@annexia.org>
Date: Sat, 07 Nov 2009 12:26:17 UTC
Local: Sat 7 Nov 2009 12:26
Subject: Re: [Caml-list] compiling C library wrapper

On Thu, Nov 05, 2009 at 06:38:05PM -0500, Aaron Bohannon wrote:
> Ah!  Yes, that's exactly the part I didn't understand and everything
> works fine now.  Thank you!

> I can't say I completely understand the byte-code case, but I don't
> have an urgent need to.

> ocamlmklib seems fine, but if it's just a matter of saving keystrokes,
> "make" does a pretty good job of that (as long as I know what to tell
> "make" to do).

For the install step, use 'ocamlfind install'.

Grab the latest source tarball for one of our projects,
eg. libvirt-ocaml, to see how we do it:

http://libvirt.org/sources/ocaml/
or: http://libguestfs.org/download/

Rich.

--
Richard Jones
Red Hat

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message, you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aaron Bohannon  
View profile   Translate to Translated (View Original)
 More options 7 Nov, 16:34
Newsgroups: fa.caml
From: Aaron Bohannon <bohan...@cis.upenn.edu>
Date: Sat, 07 Nov 2009 16:34:42 UTC
Local: Sat 7 Nov 2009 16:34
Subject: Re: [Caml-list] compiling C library wrapper
Thanks, I will look into that if I want to distribute wrapper code for
others to use.  My current problems just involve using wrapper code
from other people with incomplete/broken Makefiles.

 - Aaron

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message, you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2009 Google