Ocaml / ReasonML - отсутствуют библиотеки во встроенном исполняемом файле - PullRequest
0 голосов
/ 27 января 2020

У меня есть проект ReasonML, который использует dune build для создания исполняемого файла. Исполняемый файл запускается на компьютере разработчика (где собран код) без каких-либо проблем. Однако, если я скопирую этот exe-файл на другой мой ноутбук (еще один ma c с той же версией OSX), я не смогу выполнить файл из-за отсутствия библиотек:

dyld: Library not loaded: /usr/local/opt/gmp/lib/libgmp.10.dylib
  Referenced from: /usr/local/bin/foo
  Reason: image not found

Я не очень опыт работы с ocaml / reason, но я ожидал, что исполняемый файл объединит все необходимые зависимости внутри двоичного файла.

Есть ли специальный флаг сборки или какой-то другой шаг, который мне нужно выполнить, кроме dune build, чтобы включить все необходимые библиотеки?

1 Ответ

2 голосов
/ 27 января 2020

Что вам нужно, так это статически связывать двоичные файлы. MacOS, к сожалению, официально не поощряет и не рекомендует устанавливать ссылки * stati c. Старая страница может быть найдена здесь . Вы также можете найти этот ответ Stackoverflow полезным.

Это меньше связано с самим OCaml и больше касается поведения компоновщиков на разных платформах (MacOS, Linux et c)

Чтобы решить вашу проблему, вы можете проверить esy-gmp , если вы используете esy в качестве менеджера пакетов. Если вы работаете в OPAM, вы можете добавить conf-gmp к своим зависимостям opam

Все это, как говорится, если вы заинтересованы в установлении связи c на поддерживаемой платформе, такой как Linux (и Windows тоже, наверное?), Вам нужно будет предоставить C флаги компоновщика через дюну

(link_flags (-ccopt -static))
...