2010-11-12 2 views
6

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

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

ответ

3

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

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

+0

Спасибо за ответ. Как узнать, какой из них мне необходимо предоставить вместе с моим исполняемым файлом? Если я использую статическое связывание, как мне заставить статическую ссылку? Благодаря! – Surikator

+2

Это не библиотека ромашек, которая динамически загружается, а несколько ее файлов данных, которые содержат юникодные сопоставления для различных сопоставлений символов. – Thelema

7

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^