From: Nils Goesche <cartan@cartan.de>
To: caml-list@inria.fr
Subject: [Caml-list] How to link libraries with C parts (Bug?)
Date: 08 Jun 2001 21:45:28 +0200 [thread overview]
Message-ID: <lkvgm6ah7r.fsf@pc022.bln.elmeg.de> (raw)
Hi!
I have got a strange problem: I am writing an Ocaml library
which uses some C code. However, when I try to link this library to
an application, I get consistently some strange error (see below). I
guess I am building the library incorrectly, but I have tried a
gazillion of variations to no avail.
Here a simple example:
First, the library.
Interface mylib.mli:
val hello: unit -> string
Implementation mylib.ml:
external hello: unit -> string = "hello"
Real implementation mylibcall.c:
#include <string.h>
#include <caml/mlvalues.h>
#include <caml/memory.h>
value hello(void)
{
static const char text[] = "hello";
static const int len = 5;
CAMLparam0();
CAMLlocal1(ret);
ret = alloc_string(len);
strncpy(String_val(ret), text, len);
CAMLreturn(ret);
}
That's it. Now I build it:
$ ocamlc.opt -c mylib.mli
$ ocamlopt.opt -c mylib.ml
$ cc -c -DNATIVE_CODE -I /usr/local/lib/ocaml mylibcall.c -o mylibcall.o
$ ocamlopt.opt -a mylibcall.o -o mylib.cmxa mylib.cmx
That's it, I leave all intermediate files where they are.
Now for the application (sources in another directory):
Source myapp.ml:
let _ = print_endline (Mylib.hello ())
Compiling it:
$ ocamlopt.opt -c -I /home/nils/src/caml/bug/mylib myapp.ml
And linking:
$ ocamlopt.opt -I /home/nils/src/caml/bug/mylib \
-ccopt -L/home/nils/src/caml/bug/mylib mylib.cmxa \
-o myapp myapp.cmx
gcc: mylibcall.o: No such file or directory
Error during linking
If I copy mylibcall.o into the directory with the application sources,
everything workes fine. But I wouldn't want to ask any users of the
library to copy that damned .o file into all their directories :-)
What am I doing wrong? Because it seems to work for instance with the
lablGL libraries I generated on this machine :-(
Regards,
--
Nils Goesche
"Don't ask for whom the <CTRL-G> tolls."
PGP key ID 0x42B32FC9
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
next reply other threads:[~2001-06-08 19:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-06-08 19:45 Nils Goesche [this message]
2001-06-12 2:19 ` Jacques Garrigue
2001-06-12 13:54 ` Nils Goesche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=lkvgm6ah7r.fsf@pc022.bln.elmeg.de \
--to=cartan@cartan.de \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox