Не может скомпилировать с ocaml (ocamlopt) и плавать - PullRequest
1 голос
/ 13 января 2012

У меня проблема с компиляцией с помощью ocamlopt и float

Я нахожусь под Ubuntu 10.04 и Ocaml 3.11

для этой строки:

let a = 10.0;;

без забот с верхним уровнем

без проблем с ocamlc (код в файле test.ml):

ocamlc -o exec test.ml

ошибка с ocamlopt:

ocamlopt -o exec test.ml

сообщение:

Файл "test.ml", строка 1, символы 0-1: Ошибка: ошибка ассемблера, ввод оставлен в файле /tmp/camlasm5c3d4d.s

Откуда это?

РЕДАКТИРОВАТЬ: проблема решена, 3.12 исправляет ошибку

Спасибо, ребята:)

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Собственный компилятор OCaml работает, генерируя ассемблерный код и вызывая ассемблер системы для его сборки.Похоже, ваш компилятор генерирует ассемблерный код, который не приемлем для ассемблера.Как говорит Нлукарони, это какое-то несоответствие версий.Компилятор OCaml (по сути) ожидает другой ассемблер, чем тот, который он получает.

Если вы покажете вывод предложенных опций nlucaroni, он может дать подсказку о том, что идет не так.Также может быть интересно взглянуть на /tmp/camlasm5c3d4d.s, файл сборки, сгенерированный компилятором.

Также было бы интересно увидеть вывод

ocamlopt -config

Это покажет, какой ассемблерон пытается запустить и другую полезную информацию.

К сожалению, я не верю, что ассемблер настраивается из командной строки ocamlopt.Я на самом деле исправил эту проблему в прошлом, создав сценарий, который притворяется ассемблером (чтобы указать дополнительные флаги для реального ассемблера).Если вы не готовы к таким хакерским атакам, вам, возможно, придется обратиться за помощью к тому, кто упаковал ваш OCaml.

3 голосов
/ 14 января 2012

Похоже на известную проблему , и ошибка появляется только с определенной комбинацией binutils и ocaml, которая не должна появляться в официальных пакетах из Ubuntu 10.04. Вы используете только официальные пакеты? Если да, не могли бы вы предоставить свои точные версии binutils и ocaml?

В вышеупомянутом отчете об ошибках есть патч для ocaml, но проще всего обновить, если вы можете. Если вы используете только официальные пакеты, отчет об ошибке должен быть отправлен в Ubuntu, чтобы пакет был исправлен.

3 голосов
/ 13 января 2012

У меня не было проблем при компиляции этой строки с / OCaml 3.11.1, 3.12.0, 3.12.1 и OCaml 3.13.0 + dev8. Добавьте следующее в строку компиляции ocamlopt, чтобы увидеть, где на самом деле возникает проблема:

-verbose -ccopt -v -cclib -v

Вы сможете увидеть строки, которые ocamlopt создает во внешних программах, и, в свою очередь, как они выполняют команду. Возможно, это проблема с gcc; конфликт нескольких версий? В этом случае вам придется перекомпилировать OCaml. Я помню gcc, и в ядре linux были значительные обновления версии в Ubuntu 11.04, возможно, вы испытываете нечто подобное. В системе должны быть другие версии gcc, попробуйте gcc-4.4. Используете ли вы поставляемый пакет OCaml или вы скомпилировали сами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...