Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MPR#5099: Dependencies at byte-code link with mlpack #222

Open
damiendoligez opened this issue Mar 3, 2017 · 0 comments
Open

MPR#5099: Dependencies at byte-code link with mlpack #222

damiendoligez opened this issue Mar 3, 2017 · 0 comments
Assignees
Labels

Comments

@damiendoligez
Copy link
Member

PR transferred from https://caml.inria.fr/mantis/view.php?id=5099
[original reporter: @gsutre]

I obtain an error `Reference to undefined global ...' with ocamlbuild in
the following situation.

[File] [Contents]

example
|-- Main.ml let _ = Pack.Packed.g ()
|
|-- Pack.mlpack pack/Packed
|
|-- _tags <lib>: include
| <pack/*.cmx>: for-pack(Pack)
|
|-- lib
| |-- Lib.ml let f () = ()
| `-- Lib.mli val f : unit -> unit
`-- pack
      `-- Packed.ml let g () = Lib.f ()
$ ocamlbuild -classic-display Main.byte
/usr/pkg/bin/ocamldep.opt -modules Main.ml > Main.ml.depends
/usr/pkg/bin/ocamldep.opt -modules pack/Packed.ml > pack/Packed.ml.depends
/usr/pkg/bin/ocamldep.opt -modules lib/Lib.mli > lib/Lib.mli.depends
/usr/pkg/bin/ocamlc.opt -c -I lib -o lib/Lib.cmi lib/Lib.mli
/usr/pkg/bin/ocamlc.opt -c -I pack -I lib -o pack/Packed.cmo pack/Packed.ml
/usr/pkg/bin/ocamlc.opt -pack pack/Packed.cmo -o Pack.cmo
/usr/pkg/bin/ocamlc.opt -c -I lib -o Main.cmo Main.ml
/usr/pkg/bin/ocamlc.opt Pack.cmo Main.cmo -o Main.byte
+ /usr/pkg/bin/ocamlc.opt Pack.cmo Main.cmo -o Main.byte
File "_none_", line 1, characters 0-1:
Error: Error while linking Pack.cmo:
Reference to undefined global `Lib'
Command exited with code 2.

If I read the code correctly, this comes from the function prepare_link
in ocaml_compiler.ml which derives the dependencies from the files
.ml.depends and .mli.depends. But these files are not generated for
packs, hence the required dependencies are not build.

The attached small patch (patch-ocamlbuild-link-pack-deps.diff) simply
treats the .mlpack files as dependency files for packs, which fixes
the issue.


This byte-code linking problem with packs was reported to the list
two years ago, but with no answer:

http://caml.inria.fr/pub/ml-archives/caml-list/2008/06/784c154d0f7b53995c0167ac63fc5bb9.en.html

I also recently sent a message (with attachments) to the Caml mailing list
regarding this issue:

http://groups.google.com/group/fa.caml/browse_thread/thread/73943caba65dbc3c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants