2011-11-28 16 views
6

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"]); 

Respuesta

4

Esta no es una respuesta, sino una solución - deshabilitar este comportamiento nuevo enlazador con -cclib -Wl,--no-as-needed.

Supongo que esto se debe informar como un error a mantis. Específicamente, ocamlbuild debe garantizar que las opciones de flag s se inserten en la línea de comandos en el mismo orden en que se encuentran en la fuente (este es el caso ahora), y ocamlopt debe conservar el orden de -cclib y -ccopt argumentos wrt otras entradas en la línea de comandos (este NO es el caso ahora).

+0

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

+2

http://caml.inria.fr/mantis/view.php?id=5441 – ygrek

Cuestiones relacionadas