Partage
  • Partager sur Facebook
  • Partager sur Twitter

Emploie de la bibliothèque Chipmunk

Problème de compilation du à une fonction.

Sujet résolu
29 novembre 2018 à 13:49:14

Bonjour à tous,

Je suis actuellement en train de me coder un jeu. Je n'ai pas le temps de coder mon propre moteur physique et c'est pour ça que je cherche à employer une bibliothèque déjà écrite. Mon choix s'est porté sur Chipmunk Physique.
Dans le tutoriel il est dit que je doit compiler la bibli pour l'utiliser et voir les exemples. J'ai essayé de le faire avec des résultats mitigé: la bibli est écrite pour ubuntu et malgré ma tentative d'installation des bibliothèque manquante, je n'ai pas l'impression que la compilation ai réussi.
Plutôt que de rester bloqué à ce niveau, j'ai décidé d'ajouter tous les header et fichiers sources à mon projet et de compiler comme cela. (La bibliothèque est libre de droit, sinon, je ne me serais pas permis de le faire.)
Le problème est que le programme ne compile pas, me renvoyant un simple message d'erreur de nom de domaine. (cf log.)

Ma question est la suivante:
1) Comment puis-je compiler correctement en ayant ajouter les fichier C++ et les header à mon projet? (Ou modifier mon code, puisque j'ai l'impression que l'erreur est une erreur de nom de domaine.)
2) Si quelqu'un(e) s'y connait avec chipmunk, pourrais je avoir des indication pour la compile. (Optionel car je sais que ce n'est pas du C++)

Merci beaucoup.
Bien à vous.
Matthias.

Annexe:

#include <SFML/Graphics.hpp>
#include <iostream>
#include "mape.h"
#include "motGraph.h"
#include <string>
#include <chipmunk/chipmunk.h>

    int main()
{


  cpVect gravity = cpv(0, -100);

  cpSpace *space = cpSpaceNew();
  cpSpaceSetGravity(space, gravity);

  cpShape *ground = cpSegmentShapeNew(cpSpaceGetStaticBody(space), cpv(-20, 5), cpv(20, -5), 0);
  cpShapeSetFriction(ground, 1);
  cpSpaceAddShape(space, ground);

  cpFloat radius = 5;
  cpFloat mass = 1;

  cpFloat moment = cpMomentForCircle(mass, 0, radius, cpvzero);


  cpBody *ballBody = cpSpaceAddBody(space, cpBodyNew(mass, moment));
  cpBodySetPos(ballBody, cpv(0, 15));

  cpShape *ballShape = cpSpaceAddShape(space, cpCircleShapeNew(ballBody, radius, cpvzero));
  cpShapeSetFriction(ballShape, 0.7);

  cpFloat timeStep = 1.0/60.0;
  for(cpFloat time = 0; time < 2; time += timeStep){
    cpVect pos = cpBodyGetPosition(ballBody);
    cpVect vel = cpBodyGetVelocity(ballBody);
    printf(
      "Time is %5.2f. ballBody is at (%5.2f, %5.2f). It's velocity is (%5.2f, %5.2f)\n",
      time, pos.x, pos.y, vel.x, vel.y
    );

    cpSpaceStep(space, timeStep);
  }
  cpShapeFree(ballShape);
  cpBodyFree(ballBody);
  cpShapeFree(ground);
  cpSpaceFree(space);


    return 0;
}

Comme vous pouvez le voir j'utilise SFML. Je ne pense pas qu'il y ai de conflit entre ces deux bibli, mais je le précise au cas où.

Et les log d'erreurs:





-
Edité par MatthiasPac 29 novembre 2018 à 13:51:20

  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2018 à 15:26:22

La fonction a été renommée cpBodySetPosition

Sinon, il suffit de lire le message d'erreur. "cpBodySetPos" was not declared in this scope. C'est assez explicite.

  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.

30 novembre 2018 à 8:01:56

Bonjour à toi aussi.

Merci pour cette réponse, mais si je ne connais pas le nouveau nom de la fonction, comment puis-je résoudre le problème? C'est vrai que l'erreur est assez explicite, sa résolution, beaucoup moins.
  • Partager sur Facebook
  • Partager sur Twitter
30 novembre 2018 à 9:03:26

C'est simple, lire la documentation officielle au lieu de regarder des « tuto » sur internet. Mais certes, parfois même la documentation officielle peut-être malheureusement obsolète dans certains cas (comme des exemples).

Dans ce cas, vu que ton but était de déplacer un objet (si je ne me trompe pas), tu aurais pu regarder la documentation de référence sur les fonctions que tu peux utiliser sur l'objet cpBody.

  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.

5 décembre 2018 à 9:33:35

Bonjour, c'est encore moi.

J'ai bien suivit la documentation sur laquelle vous m'avez renvoyé. Cependant, les fonctions définie dans le tutorielle proposée par le site (https://chipmunk-physics.net/release/ChipmunkLatest-Docs/ je n'ai pas suivit un tuto au pif, je tiens à le préciser. ^^) qui sont aussi présente dans la documentation( https://chipmunk-physics.net/release/ChipmunkLatest-API-Reference/group__cp_space.html ), ne sont pas définies pour mon programme. J'ai pourtant vérifié que j'avais rajouté le bon header. En effet cpSpace.h est appelé dans chipmunk.h, je ne devrais donc pas avoir de problème de définition.
Je vous remet le code ainsi que les erreurs.
Merci d'avance.

#include <SFML/Graphics.hpp>
#include <iostream>
#include "mape.h"
#include "motGraph.h"
#include <string>
#include <chipmunk/chipmunk.h>


    int main()
{

  cpVect gravity = cpv(0, -100);

  cpSpace *space = cpSpaceNew();
  cpSpaceSetGravity(space, gravity);

  cpShape *ground = cpSegmentShapeNew(cpSpaceGetStaticBody(space), cpv(-20, 5), cpv(20, -5), 0);
  cpShapeSetFriction(ground, 1);
  cpSpaceAddShape(space, ground);

  cpFloat radius = 5;
  cpFloat mass = 1;

  cpFloat moment = cpMomentForCircle(mass, 0, radius, cpvzero);


  cpBody *ballBody = cpSpaceAddBody(space, cpBodyNew(mass, moment));
  cpBodySetPosition(ballBody, cpv(0, 15));

  cpShape *ballShape = cpSpaceAddShape(space, cpCircleShapeNew(ballBody, radius, cpvzero));
  cpShapeSetFriction(ballShape, 0.7);

  cpFloat timeStep = 1.0/60.0;
  for(cpFloat time = 0; time < 2; time += timeStep){
    cpVect pos = cpBodyGetPosition(ballBody);
    cpVect vel = cpBodyGetVelocity(ballBody);
    printf(
      "Time is %5.2f. ballBody is at (%5.2f, %5.2f). It's velocity is (%5.2f, %5.2f)\n",
      time, pos.x, pos.y, vel.x, vel.y
    );

    cpSpaceStep(space, timeStep);
  }
  cpShapeFree(ballShape);
  cpBodyFree(ballBody);
  cpShapeFree(ground);
  cpSpaceFree(space);


    return 0;
}



-
Edité par MatthiasPac 5 décembre 2018 à 9:34:44

  • Partager sur Facebook
  • Partager sur Twitter
5 décembre 2018 à 12:10:53

Ce sont des erreurs d'édition de lien, pas de compilation.

Le problème n'est pas directement dans les .h mais dans les .a/.lib que vous devriez donner comme paramètre à votre éditeur de lien.

Consultez l'aide de votre IDE pour savoir comment ajouter des fichiers de bibliothèques aux paramètres données à l'éditeur de lien.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
5 décembre 2018 à 15:05:32

Bonjour,

J'ai cherché dans les fichiers téléchargés, mais je n'ai pas trouvé de .lib. Est ce que cela peut venir du fait que je n'ai pas réussi à compiler la bibliothèque?
En dépit de cause, j'ai rajouté les headers et src à mon projet et cela semble fonctionner. Cela étant dit, si quelqu'un pouvait m’aiguiller concernant la compilation avec cmake-gui (je sais, ce n'est pas du C++...) je lui en serait grès.
  • Partager sur Facebook
  • Partager sur Twitter
5 décembre 2018 à 17:25:59

>Est ce que cela peut venir du fait que je n'ai pas réussi à compiler la bibliothèque?

Bingo ! ;)

>En dépit de cause, j'ai rajouté les headers et src à mon projet et cela semble fonctionner.

Méthode bourrin qui échoue souvent, GG pour le coup de bol.

>m’aiguiller concernant la compilation avec cmake-gui

Je connais pas, je laisse aux autres. :-°

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
6 décembre 2018 à 9:23:59

Dans ton CMakeLists.txt, tu spécifies les bibliothèques à utiliser:

# création de l'exécutable
add_executable(name ${header_files} ${source_files})

# bibliothèques à lier
target_link_libraries(name lib1 lib2)

Voir la doc de CMake pour plus de précisions.

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
17 décembre 2018 à 8:59:57

Bonjour à tous,

Tout d'abords, désolé pour ma réponse tardive, mes trois dernière semaines ont été assez chargées.
J'ai quelques questions:
Pourquoi rajouter les header et les sources ne fonctionne pas toujours?
Je ne suis pas sous Linux ( ne me frappez pas, je connais les avantages à développer sous linux, mais je n'ai pas eu le temps de m'en occuper, du coup je suis sous window) et donc j'utilise cmake-gui. Les CMakeLists.txt sont déjà écrit et donnés par le créateur de chipmunk. Ce que je n'arrive pas à faire c'est de les compiler avec le cmake graphique.
J'ai bien spécifié où se trouve le compilateur C/C++ et le dossier des sources que le cmake doit compiler. Je ne comprends pas ce qu'il y a à rajouter pour obtenir mes fichiers binaires.

Merci :D

Ha, et voici les logs:

CMake Warning (dev) at D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:81 (elseif):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "" will no longer be dereferenced when the policy is
  set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:169 (GetDefaultWindowsPrefixBase)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeSystemSpecificInformation.cmake:21 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:87 (elseif):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "" will no longer be dereferenced when the policy is
  set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:169 (GetDefaultWindowsPrefixBase)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeSystemSpecificInformation.cmake:21 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:115 (if):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "" will no longer be dereferenced when the policy is
  set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:169 (GetDefaultWindowsPrefixBase)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeSystemSpecificInformation.cmake:21 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:144 (if):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "" will no longer be dereferenced when the policy is
  set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeGenericSystem.cmake:169 (GetDefaultWindowsPrefixBase)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeSystemSpecificInformation.cmake:21 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeInitializeConfigs.cmake:30 (if):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "" will no longer be dereferenced when the policy is
  set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeRCInformation.cmake:22 (cmake_initialize_per_config_variable)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/Platform/Windows-GNU.cmake:135 (enable_language)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/Platform/Windows-GNU-C.cmake:2 (__windows_compiler_gnu)
  D:/cmake-3.12.0-win64-x64/share/cmake-3.12/Modules/CMakeCInformation.cmake:48 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

Configuring Chipmunk2D version 7.0.2
CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.12)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

Configuring done
Generating done



Bien sur, je n'ai rien de fonctionnel dans le dossier /bin que j'ai fait.

-
Edité par MatthiasPac 17 décembre 2018 à 9:10:41

  • Partager sur Facebook
  • Partager sur Twitter
11 février 2019 à 8:35:49

Bonjour,

n'ayant reçu aucune réponse, je me permets de relancer la communauté.

Bien à vous.

  • Partager sur Facebook
  • Partager sur Twitter
14 février 2019 à 22:20:07

Salut, 

Qu'as tu dans le dossier bin ?

Cordialement. 

  • Partager sur Facebook
  • Partager sur Twitter
27 février 2019 à 22:37:15

Désolé pour la réponse tardive.

Voici les fichiers présents.

Ceci se trouve dans le fichier bin.

Ca dans le CMake.

Merci de votre temps et de votre patience. :D

  • Partager sur Facebook
  • Partager sur Twitter
28 février 2019 à 3:04:13

Lu'

Avec l'invité de commande, tu te rends dans le dossier du premier screen et tu tape la commande : make

CMake est un programme simple pour créer des makefile (a exécuter avec la commande make), qui peuvent être difficiles a écrire.

Make va créer les exécutables et toutes la familles des fichiers compilés

-
Edité par MoPingouin 28 février 2019 à 3:04:59

  • Partager sur Facebook
  • Partager sur Twitter
28 février 2019 à 20:47:50

Merci powerRiCube, mais je bosse sous window(je sais, c'est mal et tout, mais je n'ai pas le temps de reformater), je ne crois pas qu'il y ai d'invite de commande. ^^'
  • Partager sur Facebook
  • Partager sur Twitter
28 février 2019 à 21:28:04

Salut,

On va pas te taper pour ne pas utiliser Linux, par contre faut savoir se qui est dispo sur Windows :p

Ouvre le menu windows (en bas a gauche) dans la barre rechercher, tape : cmd

Et voila une invite de commande ^^

Pour te déplacer, utilise la commande :  cd "Chemin absolu"

Exemple : cd C:/Local/Test

A savoir que VS ajoute aussi une invite de commande dédié : Invite de commandes des outils croisés pour VS 2017

-
Edité par K4kugen 28 février 2019 à 21:32:25

  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2019 à 0:00:14

Lu'

Comme l'a dit K4kugen, il y a pas de mal a utiliser Windows :p

Je l'utilise aussi, comme Linux ou macOS, tout dépend de la plateforme visée.

Chaque OS a un terminal de commande propre à lui ;)

Par contre, je suis pas sûr que VS installe make et je sais pas si le programme nmake.exe est l'équivalent Microsoft.

Si le terminal trouve pas le programme make, tu peux l'installer avec Cygwin ou Mingw.

  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2019 à 12:54:33

Merci pour vos réponse, je vais essayer d'installer make pour window. ^^
  • Partager sur Facebook
  • Partager sur Twitter
7 mars 2019 à 10:06:14

  Salut, j'ai installé Mingw. Lorsque j'ai essayé de compiler avec la commande "mingw32-make" la console me réponds qu'il n'y a pas de makefile, ce qui est le cas.
   Il y a par contre un CMakeLists dans le répertoir de la bibliothèque. Normalement, sous linux, j'utiliserai la commande cmake, c'est d'ailleurs ce qui est proposé dans le tutoriel de la bibliothèque:

cmake -D CMAKE_BUILD_TYPE=Debug . make

   J'ai donc un peu cherché dans la doc, mais je n'ai pas trouvé de "mingw32-cmake", et le "man" n'est pas dispo sous window.

Voilà, auriez vous la moindre suggestion pour compiler?

Merci et désolé pour le pavé.

  • Partager sur Facebook
  • Partager sur Twitter
7 mars 2019 à 12:36:11

Lu' !

- Avec la console tu vas dans le dossier où se situe le CMakeLists.txt, avec la commande cd .
- Avec la commande mkdir , tu créais un dossier, par exemple : mkdir build
Ensuite tu fais cd TonDossierCrééPrécédement

- Ensuite : cmake -D CMAKE_BUILD_TYPE=Debug ..
- Toujours dans le répertoire, utilise la commande : make ou mingw32-make, si make n'est pas reconnu.
- Si tout ce passe bien, le script Makefile va créer les exécutables ; bibliothèques ; objets...

PS : mingw32-cmake n'existe pas ;) c'est un programme à télécharger sur : cmake.org

Je te conseille vivement de réaliser la commande cmake dans un sous-dossier (build dans notre cas) car si ton dossier contient des fichiers de même nom que ceux créés par CMake, CMake va les écraser, et ça peut être problématique ;) .

Reviens vers nous si la procédure ci-dessus ne marche pas ;)

Cordialement

-
Edité par MoPingouin 7 mars 2019 à 12:36:37

  • Partager sur Facebook
  • Partager sur Twitter
8 mars 2019 à 8:45:56

Bonjour,

Un grand merci à toi powerRiCube ainsi qu'à tous ceux qui m'ont aidé dans ce forum. La bibliothèque fonctionne enfin sans rajouter tout les headers/sources au projet et ça, c'est grâce à vous.

Encore merci et bonne continuation.
Matthias

-
Edité par MatthiasPac 8 mars 2019 à 12:44:31

  • Partager sur Facebook
  • Partager sur Twitter