caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* ocamlopt problem
@ 2005-10-06  6:55 Rasool Karimi
  2005-10-06  7:07 ` Rasool Karimi
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Rasool Karimi @ 2005-10-06  6:55 UTC (permalink / raw)
  To: caml-list

[-- Attachment #1: Type: text/plain, Size: 810 bytes --]

Dear all freinds,
When I compile a .ml file with ocamlopt compiler, an error message is shown
with this message:"Der Befehl "as" ist entweder falsch geschrieben oder
konnte nicht gefunden werden, Assembler error, input left in file
C:\DOKUME~1\karinu\LOKALE~1\Temp\camlasm9312 7a.s". Part of this message is
in german and translation of it in english is : "The instruction "as" is
either wrongly written or could not not be found". But when I compile a .mli
file, this message is not shown and file is compiled successfully. Also when
I compile a .ml file with ocamlc compiler, there is no error and compilation
is done successfully. So there is not error in my program and this error
maybe is related to ocamlopt compiler.
Is there any body who can help me? It is very emergent.
Thanks,
Karimi.

[-- Attachment #2: Type: text/html, Size: 872 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread
* RE: [Caml-list] ocamlopt problem
@ 2006-06-05  8:34 EL CHAAR Rabih   SGAM/AI/SAM
  2006-06-05 10:55 ` David Allsopp
  0 siblings, 1 reply; 8+ messages in thread
From: EL CHAAR Rabih   SGAM/AI/SAM @ 2006-06-05  8:34 UTC (permalink / raw)
  To: David Allsopp, OCaml List

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


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-06-05 11:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-06  6:55 ocamlopt problem 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
2005-10-06 19:46 ` Ant: " Martin Chabr
2006-06-05  8:34 EL CHAAR Rabih   SGAM/AI/SAM
2006-06-05 10:55 ` David Allsopp

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).