Unbound module Sqlite3
Using ocamlfind to compile a trivial demonstration program that opens the Sqlite3 module.
$ cat test.ml
open Sqlite3

let () = print_endline "hello"
$ ocamlc test.ml
File "test.ml", line 1, characters 5-12:
1 | open Sqlite3
         ^^^^^^^
Error: Unbound module Sqlite3
$ ocamlfind ocamlc test.ml -package sqlite3 -linkpkg
$ ./a.out
hello

Alternative use of ocamlfind:
$ ocamlc -I `ocamlfind query sqlite3` sqlite3.cma test.ml
$ ./a.out
hello

As a side note, your code will not compile even with proper use of the compiler and ocamlfind because Sqlite3.db_close returns a boolean, you're trying to bind that expression to (). This is a type mismatch.
And you've opened Sqlite3 so you don't need to use the fully qualified names. You might want to use let& to avoid the db_close.
open Sqlite3

let () =
  let& db = db_open "test.db" in
  print_endline "hello"


I am trying to learn some OCaml, I created a very simple example to open and then close a sqlite file.
let () =
  let db = Sqlite3.db_open "test.db" in
  Sqlite3.db_close db

I did an opam install sqlite3 and I see the .opam/default/lib/sqlite3 files in place. I would expect this means that the package is installed.
When I run ocaml sqltest.ml I would expect this to execute. Instead I get a Error: Unbound module Sqlite3
Even when I make it ocaml -I +sqlite3 sqltest.ml I get the same result. It's kind of hard to search for info on ocaml and most of the stuff I find is using dune or ocamlbuild or ocamlfind or something... I think that's fine, but in the interest of starting with the basics and building from there I would like to understand how all of the pieces are working. I'd imagine the basic ocaml or ocamlc should work in this simple case.
How do I make it understand where these libs are and use them? Why does it not understand it's own "default libs"?
