TL; DR; Пакет сломан. Исправление и пара обходных путей приведены ниже, но в целом такие вопросы следует размещать в соответствующих средствах отслеживания проблем. Поэтому попробуйте открыть отчет о проблеме или запрос на получение исправления.
Эти ошибки компоновщика указывают на то, что символы из стандартной библиотеки C ++ отсутствуют. Поскольку OCaml использует компоновщик C для компоновки конечного продукта, он не передает стандартную библиотеку C ++ по умолчанию. Конечно, правильно сделанный пакет должен сделать это для нас 1 , но мы все равно можем сделать это вручную через -cclib -lstdc++
(если у вас есть libstdc ++, в противном случае используйте -lc++
).
ocamlfind ocamlopt -linkpkg -cclib -lstdc++ -package z3 example.ml -o exe
С ocamlbuild
вы можете использовать параметризованный тег cclib(x)
, например,
<example.ml>: cclib(-lstdc++)
1 предоставленный файл META содержит фальшивку
linkopts = "-cclib -L/usr/lib"
, который (a) не имеет смысла, поскольку -L
не является компоновщиком, а компилятором, а (b) бесполезен, так как /usr/lib
обычно в любом случае находится в пути поиска.
Правильный вариант должен быть:
linkopts = "-cclib -lstdc++"
Вы можете редактировать файл напрямую, он расположен в $(ocamlfind query z3)/META
.
Пожалуйста, рассмотрите возможность отправки исправления в пакет OPAM или (в идеале) в z3.