From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id 5436DBB83 for ; Mon, 5 Jun 2006 13:13:16 +0200 (CEST) Received: from orion.metastack.com (no-dns-yet.demon.co.uk [80.177.38.218] (may be forged)) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id k55BDFew021174 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Mon, 5 Jun 2006 13:13:15 +0200 Received: from treble (cpc1-cmbg6-0-0-cust230.cmbg.cable.ntl.com [81.101.136.231]) (authenticated bits=0) by orion.metastack.com (8.13.4/8.13.3) with ESMTP id k55Ajk5N029067 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for ; Mon, 5 Jun 2006 11:45:50 +0100 From: "David Allsopp" To: "OCaml List" Subject: RE: [Caml-list] ocamlopt problem Date: Mon, 5 Jun 2006 11:55:03 +0100 Organization: MetaStack Solutions Ltd. Message-ID: <008d01c6888e$826860d0$6a7ba8c0@treble> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Office Outlook 11 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 In-Reply-To: <7F070E410B10EE419826BF5206322CC2023B514E@frdef-exmb01.europe.am.socgen> Thread-Index: AcaGh0M/wTVDBWn0RjW4cIBCvegoxQB8LxuQAAFT0NA= X-Miltered: at concorde with ID 448411CB.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; ocamlopt:01 ocamlmklib:01 ocamlodbc:01 cmxa:01 ocamlodbc:01 -cclib:01 ocamlmklib:01 ocaml:01 mingw:01 makefile:01 ocamlc:01 gcc:01 resolving:01 ocaml:01 ocamlc:01 X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=disabled version=3.0.3 Dear Rabih, Thanks for this! While combing through the bottom of the manual page for linking with C I was looking at how ocamlmklib works and so = "discovered" the ar tool and noted that ocamlodbc.cmxa (well, via ocamlodbc.a = obviously) doesn't contain the C object file and added -cclib -locamlodbc. On a separate note, is there an architectural reason why ocamlmklib is not compiled under Windows? As far as I could see if you've built = OCaml from sources using the MinGW Makefile you've got everything available = that ocamlmklib would need? I'm confused with your ocamlc command by the use of the static library in building ocamlodbc.cma - CAML_DLL isn't defined anywhere in = the C code (or in its build instructions), but dllocamlodbc.dll is working = fine - is that correct? What I have noticed is that if I add -DCAML_DLL then I don't get this message from gcc when building the DLL: Info: resolving _caml_local_roots by linking to __imp__caml_local_roots (auto-import) When building an OCaml executable with ocamlc I thought that C linker isn't used (because I'd have to PATH it which I only need to do = for ocamlopt). That said, even if it does, the -dllib is still going to = cause the resulting .exe to be dynamically linked with dllocamlodbc.dll (and therefore require it on any machine that the EXE is taken to, along with ocamlrun.dll). Slightly confused as to why the -cclib switch to ocamlc helps...=20 Regards, David=20 -----Original Message----- From: EL CHAAR Rabih SGAM/AI/SAM [mailto:RABIH.ELCHAAR@sgam.com]=20 Sent: 05 June 2006 09:34 To: David Allsopp; OCaml List Subject: RE: [Caml-list] ocamlopt problem 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=20 $ 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=20 -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=A0: caml-list-bounces@yquem.inria.fr [mailto:caml-list-bounces@yquem.inria.fr] De la part de David Allsopp Envoy=E9=A0: vendredi 2 juin 2006 22:58 =C0=A0: OCaml List Objet=A0: [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!=20 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=20 $ 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.=20 Toute utilisation ou diffusion non autorisee est interdite.=20 Tout message electronique est susceptible d'alteration.=20 Societe Generale Asset Management et ses filiales declinent toute responsabilite au titre de ce message s'il a ete altere, deforme ou falsifie.=20 =20 Decouvrez l'offre et les services de Societe Generale Asset Management = sur le site www.sgam.fr=20 =20 ********=20 =20 This message and any attachments (the "message") are confidential and intended solely for the addressees.=20 Any unauthorised use or dissemination is prohibited.=20 E-mails are susceptible to alteration.=20 Neither Societe Generale Asset Management nor any of its subsidiaries or affiliates shall be liable for the message if altered, changed or = falsified. =20 Find out more about Societe Generale Asset Management's proposal on www.sgam.com