caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "EL CHAAR Rabih   SGAM/AI/SAM" <RABIH.ELCHAAR@sgam.com>
To: "David Allsopp" <dra-news@metastack.com>,
	"OCaml List" <caml-list@yquem.inria.fr>
Subject: RE: [Caml-list] ocamlopt problem
Date: Mon, 5 Jun 2006 10:34:09 +0200	[thread overview]
Message-ID: <7F070E410B10EE419826BF5206322CC2023B514E@frdef-exmb01.europe.am.socgen> (raw)

Hello David,
The problem that you are facing is the following:
Your c code is available through dllocamlodbc.dll which is dynamically loaded by the toplevel.

My understanding is that the capacity to load dynamically functions is only available througth the toplevel.
When generating executable (native or bytecode), you should pass the c code embedded in a static library.

You should have a libocamlodbc_.a built from ocaml_odbc_c.o, say via 
$ ar -r libocamlodbc_.a ocaml_odbc_c.o

Here maybe you should pay attention to some aspects of exporting C functions to caml via -DCAML_DLL. If this is the case, you should compile another ocaml_odbc_c.o omitting the definition of this symbol (I don't know if the 
-DODBC2 does this automatically) in order to generate the static library.

This static library should be passed to both ocamlodbc.cma and ocamlodbc.cmxa via

$ ocamlopt -a -o ocamlodbc.cmxa ocaml_odbc.ml ocamlodbc.mli
ocamlodbc.ml -cclib -lodbc32 -cclib -locamlodbc_

$ ocamlc -a -o ocamlodbc.cma ocaml_odbc.ml ocamlodbc.mli ocamlodbc.ml -dllib
-locamlodbc -cclib -locamlodbc_

Afterwards, while building executables, the -cclib directive will be extracted from the library and passed to the c linker.

Hope this helps.

Sincerely
Rabih

PS: What I've described above is the general approach. In your specific case, questioning the presence of ocaml_odbc.o, the answer is that it is not included in the .cmxa, it contains only specific caml code, and flags to pass to the external linkers. When passing a -ccopt ocaml_odbc_c.o to the library, it will be extracted at linking, supposing the corresponding .o is available.

-----Message d'origine-----
De : caml-list-bounces@yquem.inria.fr [mailto:caml-list-bounces@yquem.inria.fr] De la part de David Allsopp
Envoyé : vendredi 2 juin 2006 22:58
À : OCaml List
Objet : [Caml-list] ocamlopt problem

I'm trying to build the ocamlodbc package under Windows using Cygwin/MinGW.
It's all built and working except that I'm having one problem with the
native library. My question, I think, relates to a misunderstanding with
ocamlopt so I'm hoping someone can point out my error! 

I've adapted the INSTALL_mingw.sh script to issue the following commands:

$ gcc -mno-cygwin -c -DODBC2 -DWIN32 -I $OCAMLLIB/caml -I
/usr/include/w32api ocaml_odbc_c.c
$ gcc -mno-cygwin -shared -L $OCAMLLIB -L $OCAMLLIB/../bin -o
dllocamlodbc.dll ocaml_odbc_c.o -lodbc32 -locamlrun 

$ ocamlopt -a -o ocamlodbc.cmxa ocaml_odbc_c.o ocaml_odbc.ml ocamlodbc.mli
ocamlodbc.ml -cclib -lodbc32
$ cp ocamlodbc.cmxa ocamlodbc.a ocamlodbc.cmi $OCAMLLIB

$ ocamlc -a -o ocamlodbc.cma ocaml_odbc.ml ocamlodbc.mli ocamlodbc.ml -dllib
-locamlodbc
$ cp ocamlodbc.cmi ocamlodbc.cma $OCAMLLIB
$ cp dllocamlodbc.dll $OCAMLLIB/stublibs

The top-level library ocamlodbc.cma is working exactly as I'd expect. I then
attempt to compile a program that uses the native library (in this case
Exemples/monitor.ml) with the command

ocamlopt -o monitor.exe ocamlodbc.cmxa monitor.ml

but get the response

gcc: ocaml_odbc_c.o: No such file or directory
Error during linking

Despite trying various -ccopt flags, the only way I can make it compile is
to copy ocaml_odbc_c.o to the current directory. My understanding is that
the ocamlopt statement that built ocamlodbc.cmxa should have included
ocaml_odbc_c.o so why is gcc getting a linker problem when referencing the
library?

Sorry if it's a blindingly obvious mistake...


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
Ce message et toutes les pieces jointes (ci-apres le "message") sont confidentiels et etablis a l'intention exclusive de ses destinataires. 
Toute utilisation ou diffusion non autorisee est interdite. 
Tout message electronique est susceptible d'alteration. 
Societe Generale Asset Management et ses filiales declinent toute responsabilite au titre de ce message s'il a ete altere, deforme ou falsifie. 
  
Decouvrez l'offre et les services de Societe Generale Asset Management sur le site www.sgam.fr 
  
                                ******** 
  
This message and any attachments (the "message") are confidential and intended solely for the addressees. 
Any unauthorised use or dissemination is prohibited. 
E-mails are susceptible to alteration. 
Neither Societe Generale Asset Management nor any of its subsidiaries or affiliates shall be liable for the message if altered, changed or falsified. 
 
Find out more about Societe Generale Asset Management's proposal on www.sgam.com


             reply	other threads:[~2006-06-05  8:34 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-05  8:34 EL CHAAR Rabih   SGAM/AI/SAM [this message]
2006-06-05 10:55 ` David Allsopp
  -- strict thread matches above, loose matches on Subject: below --
2005-10-06  6:55 Rasool Karimi
2005-10-06  7:07 ` Rasool Karimi
2005-10-06  9:13   ` [Caml-list] " Jacques Garrigue
2005-10-06  7:25 ` David MENTRE
2005-10-06  9:09 ` Pierre Etchemaite

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=7F070E410B10EE419826BF5206322CC2023B514E@frdef-exmb01.europe.am.socgen \
    --to=rabih.elchaar@sgam.com \
    --cc=caml-list@yquem.inria.fr \
    --cc=dra-news@metastack.com \
    /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;
as well as URLs for NNTP newsgroup(s).