Ocamlopt не выдает никаких данных, только код ошибки - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь вызвать громоздкую библиотеку C ++ из OCaml, и у меня возникли проблемы с ocamlopt, который сбоит с кодом ошибки 2.

Я исполняю весь танец с использованием интерфейса C и могу заставить его работать в целом, но как только я обращаюсь к этой библиотеке, сборка прерывается.

Есть ли какой-нибудь способ узнать, что именно терпит неудачу? Я попробовал флаг -verbose, но он просто печатает аргументы командной строки (которые довольно длинные).

Не могли бы вы дать какие-нибудь советы о том, как расследовать такой тихий сбой?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

TL; DR;убедитесь, что у вас достаточно памяти и / или дискового пространства.

Нечто подобное может произойти, когда ocamlopt либо уничтожен сигналом, либо исчерпает память (или оба), проверьте вывод dmesg,ищите сообщения OOM от ядра, также используйте htop, чтобы получить представление об объеме памяти.

Кроме того, поскольку это происходит, когда вы пытаетесь установить связь с библиотекой C ++, наиболее вероятно, что это процесс ld, который завершается с ошибкой (опять же, скорее всего, с OOM), как ocamlopt использует системный компоновщик.

0 голосов
/ 27 марта 2019

В случае, если кто-то еще столкнется с этим снова: проблема заключалась в том, что драйвером сборки передавалось слишком много аргументов -ccopt и -cclib. Когда я начал включать библиотеку C ++ со множеством других зависимостей, мы, казалось, достигли предела.

Решение состояло в том, чтобы изменить правила компилятора и компоновщика драйвера сборки, чтобы записать все аргументы компилятора и компоновщика в файлы, чтобы они могли передаваться как один аргумент -ccopt @<compiler.args> или -cclib @<linker.args>. И gcc, и ld поддерживают параметр командной строки @file .

Проблема GitHub: ocamlopt позволяет компилятору / компоновщику молча завершаться ошибкой, если в

передается слишком много аргументов -ccopt или -cclib
...