Могу ли я создавать собственные исполняемые файлы с помощью OCamlBuild, которые могут работать на компьютерах без библиотек OCaml? - PullRequest
6 голосов
/ 12 ноября 2010

У меня большой проект OCaml, который я компилирую с помощью ocamlbuild. Все отлично работает, у меня есть отличный исполняемый файл, который делает все, как я хочу. Проблема в том, что когда я беру этот собственный исполняемый файл «my_prog.native» и запускаю его где-то еще (на другом компьютере с той же операционной системой и т. Д.), Новый компьютер жалуется, что не может найти ромашку (которая используется в батареях библиотеку я использую). Я думал, что исполняемый файл, который мы получили от ocamlbuild, был автономным и не требовал присутствия OCaml или Camomile на компьютере, на котором мы его запускали, но, похоже, это не так.

Есть идеи, как создать действительно автономные исполняемые файлы?

Ответы [ 2 ]

7 голосов
/ 13 ноября 2010

Большая часть кода OCaml статически связана. Есть две вещи, которые динамически связаны:

  • Библиотеки заглушки C при использовании байт-кода (и, возможно, нативного кода, хотя я не думаю, что это так). Это dllfoo.so, что соответствует libfoo.a. Если у вас есть libfoo.a, я думаю, он будет использовать его вместо dllfoo.so для собственного кода.
  • Динамические библиотеки зависят от среды выполнения или библиотек-заглушек (например, libc или libgtk, используемых lablgtk и т. Д.).

Далее, Camomile динамически загружает некоторые из своих данных Unicode, что является особым случаем, который не попадает в стандартное связывание OCaml. Вам нужно будет обратиться к документации по Camomile, чтобы найти способ статически встраивать эти данные.

3 голосов
/ 12 ноября 2010

Насколько я знаю, Camomile динамически загружается во время выполнения, поэтому проще всего было бы предоставить объект DLL / shared вместе с вашим исполняемым файлом.

Вы можете попробовать принудительно установить статическую ссылку, но это приведет к загрязнению вашего приложения лицензией LGPL.

...