代码之家  ›  专栏  ›  技术社区  ›  zajer

无法使用dune编译使用sqlite3模块的OCaml程序

  •  0
  • zajer  · 技术社区  · 1 年前

    我想在OCaml中测试Sqlite3绑定。

    我已经用下载了合适的软件包 opam ,使用时效果良好 utop 。 我是这样测试的:

    #use "topfind";;
    #require "sqlite3";;
    #show Sqlite3;;
    open Sqlite3
    let db = db_open "yolo";;
    let _ = db_close db;;
    

    问题是我不能在用dune编译的程序中使用相同的模块。以下是我试图编译的确切代码: (内容 main.ml 文件)

    let _ = Sqlite3.sqlite_version ();;
    

    (内容 dune 文件)

    (executable
        (name main)
        (libraries sqlite3)
    )
    

    当我尝试使用 dune build 我明白了 Unbound value Sqlite3.sqlite_version 。 其他程序包不会发生这种情况(已选中 yojson 并且它按预期工作)。

    编辑:值得注意的是 Sqlite3 (即。 open Sqlie3 ).ml文件中的模块可以工作。它只是使用里面的任何函数都会导致错误。

    0 回复  |  直到 1 年前
        1
  •  1
  •   zajer    1 年前

    解决方案非常简单。

    不要将你的项目命名为你想在其中使用的库。

    我使用创建了一个名为“sqlite3”的项目 dune init proj sqlite3 因此,它自动为一个名为same的库生成了一个样板。

    以任何其他方式命名它都解决了这个问题。