Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • F frama-c
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 168
    • Issues 168
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • pub
  • frama-c
  • Issues
  • #1007
Closed
Open
Issue created Apr 05, 2014 by mantis-gitlab-migration@mantis-gitlab-migration

Erreur de linkage de librarie ocaml avec des fichier objets

ID0001733: This issue was created automatically from Mantis Issue 1733. Further discussion may take place here.


Id Project Category View Due Date Updated
ID0001733 Frama-C Kernel > Makefile public 2014-04-05 2014-07-09
Reporter zuy Assigned To signoles Resolution unable to reproduce
Priority urgent Severity block Reproducibility always
Platform - OS - OS Version -
Product Version Frama-C Neon-20140301 Target Version - Fixed in Version -

Description :

Lorsqu'on fait un makefile pour son plugin en linkant une librairie (cma, cmxa) et non des fichiers objets (cmo) à ce plugin, on se retrouve avec une erreur de pré-reference : Forward reference to Llvm in file.

Additional Information :

Lorsque le makefile souhaite packager l'ensemble des fichiers objets de frama-c avec ceux du plugins on se retrouve face à un problème lorsque le plugin en question souhaite se linker avec non pas une fichier objet mais une bibliothèque de fichier objet. Autrement dit au lieu de charger un cmo, il souhaite charger un cma.

Il semblerait que le make de frama-c n'ai pas prévu cette possibilité.

L'option -pack de ocamlc qui attend uniquement des fichiers objets pour en créer un nouveau; semble ne pas gérer l'arrivé d'une librairie contenant plusieurs fichier objet parmis les fichiers donnés0. Dans l'exemple ci-dessous avec llvm.cma. Plusieurs tentatives tendent à montrer que le problème se trouve là. Des tentatives en utilisant des -for-packs uniquement avant la création de la lib partagé (cmxs) ont échouées ainsi que d'autres pour transformer les fichiers objets (en packageant les objet du frama-c et ceux du plugin) en une librairie cma et l'utiliser pour faire le fichier partagé. Voilà les pistes que j'ai suivi et que j'ai surement mal mené. Est ce réellement un bug ou une mauvaise utilisation du système de makefile mis en place ?

Exemple:

sh -c 'for f in "$@"; do if test -e $f; then chmod u+w $f; fi done' chmod_rw ./.depend ocamldep.opt -slash
-I . -I "/usr/local/lib/frama-c"
lv.ml llvmRegister.ml llvmPrinter.ml llvmMain.ml lv.mli llvmRegister.mli llvmPrinter.mli llvmMain.mli

> ./.depend touch FCLlvm_DEP chmod a-w ./.depend ocamlc.opt -c -I /usr/local/lib/frama-c/plugins -I . -w +a-4-6-9-41-44-45 -annot -bin-annot -g -I "/usr/local/lib/frama-c" -I /home/jc/.opam/system/lib/llvm lv.ml File "lv.ml", line 9, characters 6-13: Warning 26: unused variable f32x4_t. File "lv.ml", line 10, characters 6-13: Warning 26: unused variable builder. File "lv.ml", line 15, characters 6-11: Warning 26: unused variable d64_t. ocamlc.opt -c -I /usr/local/lib/frama-c/plugins -I . -w +a-4-6-9-41-44-45 -annot -bin-annot -g -I "/usr/local/lib/frama-c" -I /home/jc/.opam/system/lib/llvm llvmRegister.ml ocamlc.opt -c -I /usr/local/lib/frama-c/plugins -I . -w +a-4-6-9-41-44-45 -annot -bin-annot -g -I "/usr/local/lib/frama-c" -I /home/jc/.opam/system/lib/llvm llvmPrinter.ml ocamlc.opt -c -I /usr/local/lib/frama-c/plugins -I . -w +a-4-6-9-41-44-45 -annot -bin-annot -g -I "/usr/local/lib/frama-c" -I /home/jc/.opam/system/lib/llvm llvmMain.ml ocamlc.opt -o FCLlvm.cmo -I /usr/local/lib/frama-c/plugins -I . -w +a-4-6-9-41-44-45 -annot -bin-annot -g -I "/usr/local/lib/frama-c" -I /home/jc/.opam/system/lib/llvm -pack
llvm.cma
./lv.cmo ./llvmRegister.cmo ./llvmPrinter.cmo ./llvmMain.cmo File "none", line 1: Error: Forward reference to Llvm in file ./lv.cmo make: *** [FCLlvm.cmo] Erreur 2

Steps To Reproduce :

Créer un plugin nécessitant une librairie caml. Ici l'exemple concerne le byte code mais l'erreur se produit pour le natif aussi. Faire le make appelant le Makefile.dynamic de frama-c. Puis faire une make.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking