Tengo un problema con el orden en que las bibliotecas se agregan al vinculador. Las bibliotecas construidas previamente por ocamlbuild están vinculadas después de la lista de bibliotecas que incluí por la regla flag
. Y, tampoco veo ninguna forma de definir este tipo de dependencia en myocamlbuild.ml
.Orden de las bibliotecas vinculadas en ocamlbuild
Específicamente, el problema se produce al vincular con una biblioteca creada previamente (gzcaml
) que requiere una biblioteca en sí (z
). Debido a la rigurosidad adicional en las versiones más nuevas de gcc, el argumento -lz
debe aparecer después de libgzcaml.a
.
Estoy incluyendo todas estas bibliotecas con,
flag ["ocaml"; "link"]
(S (process "-cclib" clibs))
donde process
crea una lista alterna la biblioteca y A"-cclib"
, de manera apropiada.
Además, se anexan bibliotecas adicionales (de la salida detallada, -lm
y -ldl
) pero no tengo idea de cómo puedo modificar/agregar estas? (Esto resolvería mi problema al instante).
Mi myocamlbuild.ml
es bastante largo si no lo hubiera incluido aquí. Intenté mover el código de arriba al final de After_rules
, hacia arriba. Y cambia el orden, pero nunca después de las bibliotecas creadas (c y de otro modo) que ocamlbuild creó previamente.
EDITAR A continuación se presentan fragmentos de código que he usado en mi script de configuración y ocamlbuild para resolver el problema anterior. ¡Aclamaciones!
en configure.ac
oCFLAGS="$CFLAGS"
CFLAGS="$FLAGS -Wl,--no-as-needed"
AC_MSG_CHECKING([whether we need to add --no-as-needed linking option])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
[[
int main(){ return 0; }
]])],
[AC_MSG_RESULT([yes]); CC_NOASNEEDED="true"],
[AC_MSG_RESULT([no]); CC_NOASNEEDED="false"])
CFLAGS=$oCFLAGS
en myocamlbuild.ml.in
if @[email protected] then
flag ["ocaml"; "link"]
(S [A"-cclib";A"-Wl,--no-as-needed"]);
Gracias, funcionó de maravilla. Para cualquier otra persona con el problema, solo asegúrese de que estos indicadores estén delante de todas las bibliotecas. – nlucaroni
http://caml.inria.fr/mantis/view.php?id=5441 – ygrek