IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Probleme a la compilation


Sujet :

Caml

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Probleme a la compilation
    Salut, je bosse sur un projet, et j'aurai voulu le compiler sous forme d'un executable voici la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocamlc graphics.cma unix.cma -thread  aaa.ml -o test.exe
    Nb : j'utilise les modules Thread, qui a besoin du module Unix, et le module Graphics

    Le probleme c'est que je n'arrive pas a compiler mon programme pour pouvoir utiliser le module Thread
    ( je voudrais utiliser Thread.delay mais avec la ligne du dessus ca ne marche pas)

    je vous donnerez plus d'informations si c'est pas clair merci d'avance je galere bien

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    à mon avis, il faut d'abord compiler le fichier le ml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ocamlc -c fichier.ml

    puis faire l'édition de liens entre programme compilé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocamlc graphics.cma unix.cma -thread  aaa.cmo -o test.exe


    d'ailleurs, je me demande s'il ne faudrait pas utiliser ocamlopt
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    ocamlc et ocamlopt produisent tous deux des exécutables : l'un a besoin de la machine virtuelle, l'autre non.

    J'ai moi aussi des problèmes lorsque je veux compiler des programmes utilisant Thread. Je n'arrive pas à me démerder, et ce bien que je suive le manuel... peut-être un bug dans le manuel ?

    J'ai presque tout essayé et j'obtiens toujours la même erreur.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    enfete j'ai mal expliquer mais le gros probleme c'est de ne pas arriver a compiler le programme avec le bon thread, car meme si je fais -thread threads.cma et autres il m'indique pendant la compilation qu'il ne reconnait pas Thread.delay

  5. #5
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    De mémoire, la compilation byte-code des thread ne pose pas de problème : suis ce que dit le manuel de référence accessible depuis le site de OCaml http://caml.inria.fr.

    C'est la compilation native utilisant les thread POSIX qui pose problème chez moi. Si je m'en souviens, j'essayerai de poster un code avec la commande de compilation pour voir si quelqu'un y trouve une solution.

    Voici ce que dit le manuel.

    Citation Envoyé par Manuel
    Two implementations of the threads library are available, depending on the capabilities of the operating system:

    - System threads.
    This implementation builds on the OS-provided threads facilities: POSIX 1003.1c threads for Unix, and Win32 threads for Windows. When available, system threads support both bytecode and native-code programs.

    - VM-level threads.
    This implementation performs time-sharing and context switching at the level of the OCaml virtual machine (bytecode interpreter). It is available on Unix systems, and supports only bytecode programs. It cannot be used with native-code programs.

    Programs that use system threads must be linked as follows:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ocamlc -thread other options unix.cma threads.cma other files
    ocamlopt -thread other options unix.cmxa threads.cmxa other files
    Compilation units that use the threads library must also be compiled with the -thread option (see chapter 8).

    Programs that use VM-level threads must be compiled with the -vmthread option to ocamlc (see chapter 8), and be linked as follows:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ocamlc -vmthread other options threads.cma other files
    Compilation units that use threads library must also be compiled with the -vmthread option (see chapter 8).
    Donc voilà...

    Commence par voir si ça marche avec les VM Thread et n'oublie pas d'ajouter unix.cma dans la ligne de commande !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  6. #6
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Citation Envoyé par Dlieu Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocamlc graphics.cma unix.cma -thread  aaa.ml -o test.exe
    Non, voilà l'erreur ! Si l'implantation du parsing des arguments de la ligne de commande n'a pas changé, alors c'est sûrement ça !

    Il ne faut JAMAIS inverser les options et les arguments réels. En d'autres termes, il te faut mettre toutes les options AVANT les argument effectifs.

    Ici, tu aurais dû écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocamlc -o programe_test.exe -thread graphics.cma unix.cma aaa.ml
    C'est la norme POSIX qui veut ça : beaucoup de programmes ne l'implantent pas et considèrent que l'on peut mélanger options et arguments effectifs, mais ocamlc et ocamlopt, ainsi que tous les programmes de la distribution, eux, implantent ce comportement, qui est le bon !

    C'est une erreur classique d'illuminé du Dimanche : on met -o mon_programme.exe en fin pour spécifier qu'il s'agit d'une sortie, mais en réalité, on crée des commandes non portables voire même affreusement buguées. J'avais un prof, comme ça, qui croyait tout savoir et qui voulait absolument que tout le monde fasse comme ça... le problème, c'est qu'il travaillait sur la même machine (Sparc) depuis vingt ans !

    Autre chose : ne jamais appeler un programme test... c'est juste un conseil d'une personne devenue presque chauve à cause de ça !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    merci pour les infos par contre j'ai toujours la meme erreur, j'ai essayé la plupart des possibilitées mais j'arrive toujours au meme point, a savoir :


    je vois pas comment faire, j'ai appelé tous les modules Unix de ma connaissance, mais je dois surement faire un truc de travers

    Edit : c'est bon ca marche il suffisait d'inverser l'ordre :
    ocamlc -o mon_prog.exe graphics.cma unix.cma threads.cma aaa.ml



    Petite question : j'ai pas vraiment saisie l'interet des nombreux compilateurs possibles d'Ocaml, mais dans le but de creer un fichier executable pouvant s'exporter sur n'importequelle machine, y'en a-til un a privilegier ?

  8. #8
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Il y en a juste deux : ocamlc et ocamopt.
    ocamlc compile en byte code. Ainsi, le binaire généré est portable et peut être exécuté sur toute machine, sans avoir à recompiler quoi que ce soit. Cependant, il est nécessaire que la VM ocaml soit installée sur la machine.

    ocamlopt compile en binaire natif. Il n'a pas besoin de la VM, mais tu dois recompiler les fichiers pour chaque plateforme visée.

    En gros, tu fais comme tu veux, en fonction de tes besoins. La version native (avec ocamlopt) serait légèrement plus rapide, mais dans beaucoup de cas, je ne remarquais pas de différence flagrante.

  9. #9
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    La version native (avec ocamlopt) serait légèrement plus rapide, mais dans beaucoup de cas, je ne remarquais pas de différence flagrante.
    J'ai du code OCaml avec lequel la version native est 15 fois plus rapide. Ou plutôt la version interprétée est 15 fois plus lente, ça se manifeste surtout sur le calcul intensif quand il est 100% impératif, car la machine virtuelle est surtout optimisée pour le fonctionnel.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  10. #10
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Citation Envoyé par Dlieu Voir le message
    merci pour les infos par contre j'ai toujours la meme erreur, j'ai essayé la plupart des possibilitées mais j'arrive toujours au meme point, a savoir :


    je vois pas comment faire, j'ai appelé tous les modules Unix de ma connaissance, mais je dois surement faire un truc de travers

    Edit : c'est bon ca marche il suffisait d'inverser l'ordre :
    ocamlc -o mon_prog.exe graphics.cma unix.cma threads.cma aaa.ml



    Petite question : j'ai pas vraiment saisie l'interet des nombreux compilateurs possibles d'Ocaml, mais dans le but de creer un fichier executable pouvant s'exporter sur n'importequelle machine, y'en a-til un a privilegier ?
    Merci de lire les réponses...
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [debutant]probleme cast et compilation
    Par Battosaiii dans le forum C
    Réponses: 7
    Dernier message: 31/10/2005, 21h00
  2. Probleme soudain de compilation
    Par norkius dans le forum C++
    Réponses: 10
    Dernier message: 20/10/2005, 22h10
  3. Problème X après compilation noyau 2.6.13.2
    Par nicodeme dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 08/10/2005, 15h41
  4. [debutant] probleme a la compilation
    Par jay-hut dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/12/2004, 18h30
  5. [NetBeans] [Ant] Problème à la compil'
    Par GLDavid dans le forum NetBeans
    Réponses: 2
    Dernier message: 05/07/2004, 22h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo