Проблема состоит в том, что рантайм-библиотеки O'Caml (которые входят в бинарный дистрибутив) собраны с использованием библиотек VS2005. В результате, в моем обычном окружении (часть заголовков и библиотек от VC6), нативные модули O'Caml не собираются – валится линковка на security_cookie и прочей ботве из VC8. В принципе, можно было бы забить на это дело и собирать в стандартном окружении для VS2005. При связывании O'Caml с C++ в принципе нет потенциальных граблей с выделением памяти в одном модуле и освобождении в другом – языки сильно разные, поэтому там даже мысли не возникает насчет подобной работы с памятью :). Однако, есть пара соображений против подобного «забивания»:
Поэтому, думаю, умение собирать O'Caml при помощи ICC + хедеры и либы от VC6 будет небесполезным.
Скачать O'Caml можно отсюда: http://caml.inria.fr/ocaml/release.en.html
Для сборки понадобится Source tarball. Кстати, можно еще скачать собранные бинарники – они тоже небесполезны.
O'Caml использует TCL/TK версии 8.4. Взять можно здесь: http://www.activestate.com/products/ActiveTcl/
Сборка происходит в среде CygWin. Взять можно здесь: http://www.CygWin.com/
При установке CygWin устанавливается только минимальный набор пакетов, недостаточный для сборки. Сверх минимального набора пакетов нам понадобится только пакет make.
При сборке в CygWin будет обламываться линковка из-за того, что в CygWin входит утилита link.exe, которая скрывает link.exe от Студии. Проблему можно решить модификацией переменной PATH – поставить пути к Студии раньше, чем пути к CygWin/bin. Я решил проблему проще: переименовал CygWin'овый link :)
Модификация CygWin.bat. Для подготовки среды сборки нужно установить ряд переменных окружения типа PATH, LIB и INCLUDE. Т.к. я не силен работе с линуксовой командной строкой, то вместо настройки из CygWin я просто модифицировал стартовый файл CygWin – CygWin.bat. Я просто добавил туда содержимое vsvars32 и iclvars из Студии и ICC. К переменной LIB нужно дополнительно добавить путь к библиотекам TCL: D:/Tcl/lib.
После настройки CygWin, запускаем ее и выполняем, согласно инструкции, следующие подготовительные команды:
В каталоге D:\OCaml\ocaml-3.10.2\config необходимо отредактировать makefile:
Допиливание связано с тем, что make обламывается на переводах строки в стиле Windows – оно ожидает их в линуховом формате. Возможно, здесь я сам прокосячил – при установке CygWin выдается запрос какие переводы строк следует поддерживать. Linux-формат стоял как recommended, поэтому я его и выбрал.
Итак, допилить нужно следующие файлы:
Просто выполняем в CygWin команды по инструкции:
Запускаем из командной строки все необходимые батники для установки переменных окружения и запускаем на компиляцию вот этот учебный пример:
командой
Если все сделано правильно, то на выходе получим полностью самостоятельный EXE размером 335К. Тогда как EXE, собранный студийным компилятором, весит, примерно, 275К. Признаки компилятора Интел налицо :)
Возможно, люди, которые лучше разбираются с командной строкой Линукса, могли бы предложить более прямой способ сборки. Мне же CygWin был нужен только для сборки, поэтому я с ним особо не церемонился.
Реально для сборки программ на O'Caml нужны только пересобранные рантайм-библиотеки, а не вообще весь компилятор, его рантайм и прикладные библиотеки. Вероятно, существует более простой способ, которым можно собрать только рантайм-библиотеки.
Ссылок на эту страницу нет