From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id NAA27016; Sat, 7 Sep 2002 13:27:50 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id NAA27023 for ; Sat, 7 Sep 2002 13:27:49 +0200 (MET DST) Received: from relay.rinet.ru (relay.rinet.ru [195.54.192.35]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id g87BRm101914 for ; Sat, 7 Sep 2002 13:27:48 +0200 (MET DST) Received: (from uucp@localhost) by relay.rinet.ru (8.11.6/8.11.6) with UUCP id g87BRlD10843 for caml-list@inria.fr; Sat, 7 Sep 2002 15:27:47 +0400 (MSD) X-Envelope-To: caml-list@inria.fr Received: from dialin1.stormoff (ROVER1) [192.168.0.129] by stormoff with esmtp (Exim 3.12 #1 (Debian)) id 17ndkV-0005vf-00; Sat, 07 Sep 2002 15:27:36 +0400 X-Comment-To: Xavier Leroy To: caml-list@inria.fr Subject: Re: [Caml-list] ocamlmklib missing in win32 ? References: <20020826152250.A604@pauillac.inria.fr> From: Dmitry Bely Date: Sat, 07 Sep 2002 15:26:28 +0400 Message-ID: User-Agent: Gnus/5.090005 (Oort Gnus v0.05) XEmacs/21.4 (Common Lisp (Windows [3]), i586-pc-win32) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Xavier Leroy writes: >> I had been trying to install some additional packages in my system. >> My original intention was to install PXP. I am getting closer now. I have >> managed PCRE (with some hints and files from Yutaka OIWA). >> >> I needed to build (I think) the wlex - runtime to get PXP built. >> But while building wlex broke because there is no ocamlmklib in my system. > > Correct: ocamlmklib is only available under Unix (and Cygwin), but not > for the native Win32 port of OCaml. > > The reason is as follows: ocamlmklib builds both a DLL and a static > library from a common set of C object files. This works fine under > Unix because (with the right compilation options) the same object > files can be used in both DLL and static contexts. But this isn't so > under Windows: object files for a DLL need to be compiled with > different, incompatible flags than object files for a static library. IMHO that's wrong. /M* compiler flags specify which Microsoft runtime library our compiled module (no matter dll, static lib, or standalone exe) will be linked with. _DLL macro, that /MD also defines, is just intended for use in Microsoft headers (they are slightly different for DLL-packaged runtime). So you can build a DLL with /MT flag and using #if _DLL in misc.h seems to not be very correct. As a solution that requires mininal changes, but uses the same compiler flags for building both static and dynamic libraries, I would suggest [byterun/misc.h] #if defined(_WIN32) # if defined(_MSC_VER) /* Supress the warning, generated by dllimport declaration */ /* and dllexport definition if both are present */ # pragma warning(disable: 4273) # endif # define CAMLexport __declspec(dllexport) # define CAMLprim __declspec(dllexport) # define CAMLextern __declspec(dllimport) extern #else # define CAMLexport # define CAMLprim # define CAMLextern extern #endif [byterun/custom.c] replace CAMLextern with CAMLexport in function definitions (looks like a bug) [config/Makefile] BYTECCCOMPOPTS=/Ox /MD BYTECCLINKOPTS=$(BYTECCCOMPOPTS) DLLCCCOMPOPTS=$(BYTECCCOMPOPTS) NATIVECCCOMPOPTS=$(BYTECCCOMPOPTS) NATIVECCLINKOPTS=$(NATIVECCCOMPOPTS) It works -- I have just done "make -f Makefile.nt clean world opt bootstrap". > Hence, the Windows Makefiles for a mixed OCaml/C library must be > written in such a way that C files are compiled twice, with the > correct flags, and the building of the DLL and of the static library > must be done by hand. To see how to proceed, refer to > otherlibs/*/Makefile.nt in the OCaml source distribution. > > Sorry for the inconvenience, but once more Windows makes things more > complex than they really need to be :-) - Dmitry Bely ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners