CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Outils et libs OCaml

chris_27
chris_27
Niveau 10
06 septembre 2009 à 23:48:23

Isukthar : oui, les redirections unix ( < | > ) ça ne marchera pas sous windows. :-)
Je viens de voir le lien en question (que j'avais complètement zapé). J'essaie de transcrire la chose en un Makefile portable.

chris_27
chris_27
Niveau 10
07 septembre 2009 à 00:12:50

Correction, le > marche bien sous Windows. :-)

J'ai pas vu l'intérêt des "| grep" donc j'ai enlevé ça. Après, changer les < en < et les > en > semble suffire pour avoir un Makefile compatible Windows.

Essaie http://pastebin.com/m15cdc1d7 .

Pour info, voici à quoi ressemble un des mes Makefile caml :
http://pastebin.org/15515
C'est quand même plus humain. Par contre il faut changer les variables entre les lignes 10 et 20 pour adapter à chaque projet. :-)

----

Pour en revenir à ton message d'erreur :
« ocamlopt -o main.opt -inline 10 -unsafe -noassert -w Ae -I /usr/local/lib/ocaml/
3.11.0 -ccopt -L/usr/local/lib/ocaml/3.11.0 -cc cc main.cmx »
Moi je rajouterai un "graphic.cmxa" juste avant le main.cmx. Ce "graphic.cmxa" irait à la ligne 29 (LIBS_OPT = graphics.cmxa) dans mon Makefile.

dnob700
dnob700
Niveau 10
07 septembre 2009 à 01:23:13

Oui, les &gt je m'en suis aperçu tout à l'heure, c'est un bogue de viewvc. Il suffit de sortir le fichier via svn pour qu'il soit correcte. Je me sert de $(GREP) pour filtrer les fichiers produit automatiquement (c'est l'un des points que je veut changer car le fichier mli produit n'a pas un format adapté à grep).

Pour l'erreur sur le chemin d'accès, il faut l'ignorer (les options par défaut sont pour Linux et ce n'est qu'un warning), ou alors il faut modifier la variable LIBINSTDIR. À ce détail là le Makefile est probablement portable pourvu qu'on est les outils nécessaire (et de ce point de vue cat n'est pas plus étranger à windows que make lui même).

Pour graphics, il faut rajouter dans le makefile l'option
LIBS = graphics

Il faut bien comprendre que ce makefile n'est pas censé être copié dans chaque projet, mais juste inclue dans un petit makefile qui ressemble alors à ça :

LIBS=graphics
include OCaml.mk

Qui est suffisant pour un programme constitué d'un seul fichier.
À long terme, mon makefile est plus polyvalent (il permet, entre autre options importantes, de créer des bibliothèques). Mais il est peut-être plus complexe (quoi qu'on puisse difficilement faire plus simple pour ce genre de chose. Si tu l'utilise, n'hésite pas à poser ici les éventuelles questions que tu peut avoir dessus.

chris, je ne sais pas pourquoi tu qualifie cygwin d'abomination suprême, c'est relativement léger et ça fonctionne bien. De plus ça permet d'éviter les erreurs rencontrés par Isukthar. Il aura besoin d'autre outils à un moment ou à un autre et plutôt que de les installer un à un cygwin gère tout d'un coup.

Ce que je voulais dire pour le PATH qui est différent sous windows, c'est que, comme tu l'as expliqué, tu est obligé de le modifier à la main (et l'option est assez profondément enfouie) pour chaque programme que tu veux voir s'y trouver. Il n'y a l'équivalent de /usr/bin, sauf à mettre ses exécutable dans C:\windows ...

chris_27
chris_27
Niveau 10
07 septembre 2009 à 09:04:33

« Je me sert de $(GREP) pour filtrer les fichiers produit automatiquement (c'est l'un des points que je veut changer car le fichier mli produit n'a pas un format adapté à grep). » :d) oui, ça d'accord. Mais pourquoi diable filtres-tu ? C'est ça que je n'ai pas compris. :-)
Enfin ça n'a que peu d'importance, après tout, dans la vraie vie, les fichiers .mli qui ont de l'importance existent, donc pas besoin d'appeller la règle .ml :d) .mli.

« Ce que je voulais dire pour le PATH qui est différent sous windows, c'est que, comme tu l'as expliqué, tu est obligé de le modifier à la main (et l'option est assez profondément enfouie) pour chaque programme que tu veux voir s'y trouver. Il n'y a l'équivalent de /usr/bin, sauf à mettre ses exécutable dans C:\windows ... »
:d) tu peux toujours créer un tel répertoire et y déplacer les différents exécutables. Après ça donnera un beau bordel où on ne trouve rien comme sous Linux. :o))
Une solution un peu plus sexy serait de pouvoir mettre C:\Program Files\*\bin dans le Path. Faudrait que je creuse pour voir si Windows permet ça.
Enfin, tu peux toujours faire un :
$ set Path=%Path%:<insert_here_a_repertory>
$ <command>
si tu veux un changement ponctuel (enfin il faut se reloguer pour qu'il disparaisse). Cette variante là n'est pas très compliquée, elle. :-)

chris_27
chris_27
Niveau 10
07 septembre 2009 à 09:09:06

J'oubliais, cygwin c'est une solution dégueulasse parce quand on développe sous Windows pour Windows, on n'utilise pas un faux Unix (relativement cagneux en plus) pour le faire.

isukthar
isukthar
Niveau 10
07 septembre 2009 à 11:34:53

J'ai séparé le makefile et le OCaml.mk et j'ai mis LIBS = graphics dans le makefile. Maintenant j'ai ça comme erreur:

ocamlopt -o main.opt -inline 10 -unsafe -noassert -w Ae -I /usr/local/lib/ocaml/
3.11.0 graphics.cmxa -ccopt -L/usr/local/lib/ocaml/3.11.0 -cc cc main.cmx
'cc' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
make: *** [main.opt] Error 2

dnob700
dnob700
Niveau 10
07 septembre 2009 à 11:46:19

Je te conseille d'utiliser ocamlc pour l'instant. Pour utiliser ocamlopt il faut installer un compilateur C en plus (et la version de ocaml qui va avec).

chris_27
chris_27
Niveau 10
07 septembre 2009 à 12:56:03

Gcc est fournit par MinGW. Donc soit tu changes le cc en gcc dans le Makefile, soit tu copies gcc.exe en cc.exe dans le répertoire bin de MinGW.

isukthar
isukthar
Niveau 10
07 septembre 2009 à 13:18:31

J'ai créé une copie de gcc apellée cc. Maintenant j'obtiens des référence indéfinies vers flexdll_dlopen, flexdll_...

chris_27
chris_27
Niveau 10
07 septembre 2009 à 14:20:51

Euh, là j'ai besoin du message d'erreur complet. :(

Tu utilises ocamllex quelque part ? :question:

dnob700
dnob700
Niveau 10
07 septembre 2009 à 21:39:52

non, mais c'est une erreur connu de mingw utilisé avec ocaml (flex est le loader dynamique de ocaml, rien à voir avec lex, sauf le nom).

Est-ce que tu as bien installé la version de OCaml pour mingw si c'est le compilateur que tu utilise maintenant ?

isukthar
isukthar
Niveau 10
07 septembre 2009 à 23:28:12

J'ai bien la version MinGW, j'ai même réinstallé OCaml et ça ne marche pas. Voici le message d'erreur:
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x323
):
undefined reference to `flexdll_dlopen'
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x33a
):
undefined reference to `flexdll_dump_exports'
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x363
):
undefined reference to `flexdll_dlclose'
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x37d
):
undefined reference to `flexdll_dlsym'
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x399
):
undefined reference to `flexdll_dlopen'
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x3a8
):
undefined reference to `flexdll_dlsym'
C:\Program Files\Objective
Caml\lib\libasmrun.a(win32.o):win32.c:(.text+0x3b5
):
undefined reference to `flexdll_dlerror'
collect2: ld returned 1 exit status
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
make: *** [main.opt] Error 2

Si vous trouvez pas, ça fait rien, je changerais de langage. J'aurais plus vite fait de porter mon code caml que d'arriver à compiler.

dnob700
dnob700
Niveau 10
07 septembre 2009 à 23:39:45

utilise ocamlc et ça fonctionnera très bien. Ou utilise cygwin (en installant ocaml via son installer si tu n'a pas besoin d'une des toutes dernières versions) et ça marchera très bien aussi, ou utilise la version pour VC++ (en l'installant) et ça fonctionnera très bien.

Mais mingw est une abomination suprême avec plein de hack et je ne te recommande pas du tout de l'utiliser (vengeance !).

Par contre, en aucun cas n'abandonne OCaml, c'est de loin le meilleur langage que je connais.

isukthar
isukthar
Niveau 10
08 septembre 2009 à 00:04:16

C'est vrai que c'est un excellent langage. C'est le 1er langage que j'ai appris et celui que j'ai le plus utilisé durant mes études.
Mais je trouve qu'ils font pas trop d'efforts pour le rendre populaire. Rien qu'à voir tous les problèmes que je rencontre, ou le manque d'IDE et libs.

chris_27
chris_27
Niveau 10
08 septembre 2009 à 00:19:13

Pédagogiquement parlant, Ocaml est excellent en effet.

Isukthar : Utilise ocamlc va. Tu y perds un peu en perf, mais as-tu vraiment besoin de performance ? Sinon, les problèmes tu les rencontres avec presque tous les langages. La solution c'est d'utiliser linux. Installation d'un compilateur pour le langage de ton choix en trois clics, présence d'outils puissants et fonctionnels, applications mieux pensées et plus riches, … Franchement, pourquoi développer sur une autre plateforme ?
(ok, je prêche pour ma paroisse là. :o)) )

Pour l'ide, il me semble avoir déjà cité (g)vim. Non seulement c'est un excellent IDE, mais en plus c'est vrai quelque soit le langage de prog utilisé. :bave:

dnob700 : moi je préfère mingw (qui est sûrement très goret quand on le regarde de près) à cygwin (qui est sûrement tout aussi goret quand on le regarde de près). Je préfère avec juste un make.exe moisi que toute une couche d'émulation cagneuse. À la limite, le moins moisi pour développer sous windows, c'est presque de virtualiser un Linux (et je dis ça alors que je déteste la virtualisation).

isukthar
isukthar
Niveau 10
08 septembre 2009 à 20:00:14

"Utilise ocamlc va. Tu y perds un peu en perf, mais as-tu vraiment besoin de performance ? Sinon, les problèmes tu les rencontres avec presque tous les langages. La solution c'est d'utiliser linux. Installation d'un compilateur pour le langage de ton choix en trois clics, présence d'outils puissants et fonctionnels, applications mieux pensées et plus riches, … Franchement, pourquoi développer sur une autre plateforme ? "

En fait c'était pour un petit jeu d'awélé. Pendant mes étude j'ai développé une version en mode console en OCaml. Donc la je voulais reprendre mon code pour ajouter une interface graphique, l'optimiser, le multi-threader, améliorer l'heuristique ...
En cours, il n'y avait pas vraimment de problème puisqu'on on était sous Unix en ligne de commande, en byte coden et en plus on nous filait le make file. Mais si je veux distribuer mon programme, je peux pas faire l'impasse sur Windows.

Et pour ce qui est des autres langages et de windows, c'est loin d'être aussi galère. J'utilise parfois Visual studio pour du C++ ou C# et c'est bien agréable. Même pour des langages moins connu comme le D, ça marche nickel avec code blocks.

chris_27
chris_27
Niveau 10
08 septembre 2009 à 20:52:39

« un petit jeu […] module Graphics […] » :d) ocamlc est amplement suffisant pour ça. Ceux qui veulent jouer à ton jeu n'ont qu'à installer caml. :o))

Plus sérieusement :
1) je ne suis pas sûr que juste coller un bytecode issu d'ocamlopt sur une machine lambda suffise pour faire marcher le jeu sur une machine lambda. J'avoue ne pas trop savoir comment ocamlopt gère sa sauce (et encore moins sous Windows) mais tu risques d'avoir besoin de .dll ou équivalent.
2) Vu la consommation que demande ton projet, ocamlc est amplement suffisant (sauf si tu as codé un moteur 3D avec des effets d'ombres via du ray tracing :rire: ).

Pour le C/C++, c'est vrai que ça va à peu près. On est plus au temps de mes débuts au la compilation d'un code C avec Dev-C++ chiait à cause d'erreurs dans le stdio.h. :)
Mais pour des langages genre Haskell ou même Python et Perl, ça doit pas être beaucoup plus la joie que pour Ocaml sous Windows.

Tiens, tu as code::blocks ? Si j'ai bien compris, c'est plus ou moins un fork de Dev-C++, donc il devait te fournir le make.exe et compagnie. Si ça se trouve, il suffisait juste d'ajouter le répertoire bin de CB dans ton Path (et donc pas besoin d'installer MinGW).

isukthar
isukthar
Niveau 10
08 septembre 2009 à 21:36:38

"Vu la consommation que demande ton projet, ocamlc est amplement suffisant (sauf si tu as codé un moteur 3D avec des effets d'ombres via du ray tracing "

En mode console, le le choix de l'ordinateur n'est pas "instantané" au delà de la profondeur 6. Donc passer en code natif était un moyen facile et rapide d'améliorer ça.

Pour ce qui est de codeblocks, on peut télécharger une version avec ou sans MinGW. J'ai pris la version sans MinGW puisque j'ai déjà MinGW à côté. Mais au final, il faut quand même avoir MinGW (sauf si on passe par le compilateur de Microsoft ou autre).

chris_27
chris_27
Niveau 10
08 septembre 2009 à 23:04:35

« En mode console, le le choix de l'ordinateur n'est pas "instantané" au delà de la profondeur 6. » :d) ça ne devrait pas changer en mode graphique. C'est si compliqué que ça l'awélé ? J'avais souvenir de règles plutôt simples, et d'un espace de possibilités pas spécialement grand. :(
Après, il faut voir ce que tu appelles "pas instantané" et les performances de la machine à la «profondeur 6». Si la machine met une seconde et qu'elle gagne presque à tous les coups contre de très bons joueurs, tu peux t'arrêter là. Il n'y a rien de plus frustrant que de se faire plier par la machine tout le temps, dédicace à l'othello… :-)))

Ha, Dev-C++ vient forcément avec "MinGW" lui. Je mets des " parce qu'on trouve dans son bin/ quelques exécutables que je soupçonne fort d'être ceux de MinGW, mais je n'ai jamais pris la peine de vérifier si c'était exactement ceux de MinGW, une version modifiée, un fork, ou complètement autre chose. :-)
Bref, c'est sans doute mieux (moins chiant) de laisser code::blocks / Dev-C++ installer lui-même MinGW en fait.

godrik
godrik
Niveau 30
09 septembre 2009 à 14:37:39

dev c++, c'est pas le truc super plus maintenu depuis 10 ans ?

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment