From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 8F5937F734 for ; Tue, 22 Sep 2015 08:46:01 +0200 (CEST) IronPort-PHdr: 9a23:4G5iFxXCQ9OLhnwgXrjTsOq66ujV8LGtZVwlr6E/grcLSJyIuqrYZh2Gt8tkgFKBZ4jH8fUM07OQ6PC8HzdRqs/Z7zgrS99laVwssY0uhQsuAcqIWwXQDcXBSGgEJvlET0Jv5HqhMEJYS47UblzWpWCuv3ZJQk2sfTR8Kum9IIPOlcP/j7n0oM2PJV4Zz2PlPvtbF1afk0b4joEum4xsK6I8mFPig0BjXKBo/15uPk+ZhB3m5829r9ZJ+iVUvO89pYYbCf2pN4xxd7FTDSwnPmYp/4Wr8ECbFUrcrkcbB0AfiAZJBUDp4TT3WpP2+n//v/Bh2S+WMMj7SbQzcTun5qZvDhTvjXFUGSQ+9TT4g8Zqja9f6CmqpxFlzpScNI6cPuB/c6ebZtgaSHBMRO5eUiVABsW3aI5ZXLlJBvpRs4So/whGlhC5HwT5Qbq3kjI= Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=gabriel.scherer@gmail.com; spf=Pass smtp.mailfrom=gabriel.scherer@gmail.com; spf=None smtp.helo=postmaster@mail-wi0-f170.google.com Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of gabriel.scherer@gmail.com) identity=pra; client-ip=209.85.212.170; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of gabriel.scherer@gmail.com designates 209.85.212.170 as permitted sender) identity=mailfrom; client-ip=209.85.212.170; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-wi0-f170.google.com) identity=helo; client-ip=209.85.212.170; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="postmaster@mail-wi0-f170.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0CXAQCB+ABWm6rUVdFdg0M1aQa0PosPhgECgTMHPBABAQEBAQEBARABAQEBAQYLCwkhLoIdgggBAQQSER0BGx0BAwwGAwILDQICJgICIQEBEQEFARwGEyKHdgEDEplaj0aBMD4xi0aBbIJ5ihIKGScNVoQQAQEBAQYBAQEBGAEFDoEUhVGEfYJQgVA6MweCaYFDAQSHNIVJiGiFEYYJgW+BTUaHEIo6hXQSI4EXOIIvgX88M4gugT8BAQE X-IPAS-Result: A0CXAQCB+ABWm6rUVdFdg0M1aQa0PosPhgECgTMHPBABAQEBAQEBARABAQEBAQYLCwkhLoIdgggBAQQSER0BGx0BAwwGAwILDQICJgICIQEBEQEFARwGEyKHdgEDEplaj0aBMD4xi0aBbIJ5ihIKGScNVoQQAQEBAQYBAQEBGAEFDoEUhVGEfYJQgVA6MweCaYFDAQSHNIVJiGiFEYYJgW+BTUaHEIo6hXQSI4EXOIIvgX88M4gugT8BAQE X-IronPort-AV: E=Sophos;i="5.17,571,1437429600"; d="scan'208";a="148157736" Received: from mail-wi0-f170.google.com ([209.85.212.170]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 22 Sep 2015 08:46:00 +0200 Received: by wicgb1 with SMTP id gb1so144883849wic.1 for ; Mon, 21 Sep 2015 23:46:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=VCrXE+3XGSe8mAny3QHDe6dj2F1Uxfujyq6UMKA0q7Y=; b=ddSq2+pYNDuAbZrgM0lQPrtlTgkc4WP1rdtvwYPyU7cobw71VSZLABx5Q+RbCHJ5Va AUQGZ7R68YNiAo/AXzGgkPtOpuSov2bkas3HFkTEaA3Z1xPvtq2qkNAYFa/cmetJ4XUf wszPZqK7BJ6w4tB3MIYAH2disQ2VPWjBeqa0vRmSWzOPkQBBp+0PRuO4TQpB5lQ5L66I 3X5jv8FrZPDdFiKuQJUGbGFgXrU9UmM4/6MdzqF+TsgLt6tcPmm9+5vTzKTbE2QdJb9n g4uMSSJNOo+uAfT/elaEf2jgvR3zS2shp6QfHYZ7epK7xboqqbn6drOPSSEyQiV9aGB7 gdEQ== X-Received: by 10.180.149.167 with SMTP id ub7mr953148wib.43.1442904360572; Mon, 21 Sep 2015 23:46:00 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.148.212 with HTTP; Mon, 21 Sep 2015 23:45:21 -0700 (PDT) In-Reply-To: References: From: Gabriel Scherer Date: Tue, 22 Sep 2015 08:45:21 +0200 Message-ID: To: Martin DeMello Cc: OCaml List Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Caml-list] building and using a library in a subdirectory A .cma or .cmxa archive does not pack its sub-modules under a common module name: the module name Puz_plugin that you use does not refer to anything. Accessing any of the constituent modules directly (eg. Puz_match.foo) should work -- although it may not go through the .cmxa but directly refer to the compilation unit. Note that if "_plugin" is intended to refer to dynamic linking, you may want to use a .mldylib file instead of .mllib, to be used to generate a .cmxs file: .cmxa is not suitable for dynamic linking (while, at the bytecode level, .cma work for both static and dynamic linking). On Tue, Sep 22, 2015 at 8:23 AM, Martin DeMello w= rote: > If I have my project set up like this: > > . > =E2=94=9C=E2=94=80=E2=94=80 file.ml > =E2=94=9C=E2=94=80=E2=94=80 plugins > =E2=94=82 =E2=94=94=E2=94=80=E2=94=80 puz > =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_bin.ml > =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_match.ml > =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz.ml > =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_plugin.mllib > =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_types.ml > =E2=94=82 =E2=94=94=E2=94=80=E2=94=80 puz_utils.ml > =E2=94=94=E2=94=80=E2=94=80 _tags > > $ cat plugins/puz/puz_plugin.mllib > Puz Puz_bin Puz_match > > This works: > > $ ocamlbuild -use-ocamlfind plugins/puz/puz_plugin.cmxa > Finished, 22 targets (3 cached) in 00:00:03. > > My _tags file: > ------------------------------------------------ > $ cat _tags > true: thread,debug > true: package(core_kernel) > > "plugins/puz": include > > : package(labltk) > <**/puz.*>: package(unix), package(str), package(core_kernel), > package(bitstring), package(mikmatch_pcre) > <**/*_bin.*>: package(bitstring.syntax), syntax(bitstring) > <**/*_match.*>: package(mikmatch_pcre), syntax(camlp4o) > ------------------------------------------------ > > But I can't figure out how to use this library in my main program. This i= s a > minimal example of what I'm trying to do, not working of course: > > $ cat file.ml > open Core_kernel.Std > > let read fname =3D > let data =3D In_channel.read_all fname in > Puz_plugin.read data > > $ ocamlbuild -use-ocamlfind file.native > + ocamlfind ocamlc -c -g -thread -package core_kernel -I plugins/puz -o > file.cmo file.ml > File "file.ml", line 5, characters 2-17: > Error: Unbound module Puz_plugin > > martin