OCamlbuild и создание собственной динамически связанной библиотеки - PullRequest
3 голосов
/ 08 декабря 2011

Я разместил вопрос в ocaml listserv , на который никто не ответил, я надеюсь, что кто-то здесь может либо назвать меня идиотом, подтвердить ситуацию или предложить творческое решение.

При построении динамической библиотеки через ocamlbuild Я застреваю на последней строке ссылки,

/opt/ocaml-3.12.1/bin/ocamlopt.opt -shared -verbose -cc gcc plugins/example.cmx -o plugins/example.cmxs -ccopt -v
+ as -o 'plugins/example.cmxs.startup.o' '/tmp/camlstartupe6993f.s'
+ gcc -o 'plugins/example.cmxs'   '-L/opt/ocaml-3.12.1/lib/ocaml' -v 'plugins/example.cmxs.startup.o' 'plugins/example.o'

Это создает ошибку, подобную здесь .Эта ошибка исправляется, когда я удаляю опцию -cc и флаг -shared передается gcc.

/opt/ocaml-3.12.1/bin/ocamlopt.opt -shared -verbose plugins/example.cmx -o plugins/example.cmxs -ccopt -v
+ as -o 'plugins/example.cmxs.startup.o' '/tmp/camlstartup2c31a2.s'
+ gcc -shared -o 'plugins/example.cmxs'   '-L/opt/ocaml-3.12.1/lib/ocaml' -v 'plugins/example.cmxs.startup.o' 'plugins/example.o'

OCamlbuild передает опцию -cc всем, поэтому удаление, которое не являетсяопция.Похоже на ошибку в ocamlopt;кто-нибудь сталкивался с подобными ситуациями?Я что-то упускаю или какие-либо параметры в компиляции?

Спасибо.


РЕДАКТИРОВАТЬ

Мое решение - просто передать параметры черезфлаг в myocamlbuild.ml

flag ["shared"; "link"]
    (S [A"-ccopt";A"-shared"]);

1 Ответ

2 голосов
/ 08 декабря 2011

Невозможно воспроизвести здесь.

Ocamlbuild сам по себе не пропускает опцию -cc (зачем это нужно?), И я не могу найти такое поведение в источниках. Поэтому он, вероятно, передается вашим плагином - и это неправильно, потому что ocamlopt определяет компоновщик для разделяемых библиотек во время настройки (обычно это gcc -shared), но если опция -cc указана явно - он с радостью использует ее вместо .

NB опция -shared не «передается» в ocamlopt, но вместо этого она позволяет связать динамический плагин, и это приводит к выбору специального компоновщика C для разделяемых библиотек (который является gcc с опцией с таким же именем). Указание -cc переопределяет его в целом.

...