Partage
  • Partager sur Facebook
  • Partager sur Twitter

utiliser une lib dans une autre

    4 décembre 2019 à 23:11:42

    Bonjour je souhaite creer une lib statique pour dessiner des graphiques mais le probleme c'est qu'elle repose sur la SFML et que quand j'essaye de l'utiliser le compilateur m'engueule en me disant que les fonction/types de variables que j'utilises ne sont pas référencés ce qui ai normal mais je ne trouve pas de solution me permettant d'utiliser les fonction SFML dans ma lib alors si vous avez une solution a mon problème ça m'aiderai beaucoup a calmer mon compilateur :p

    Bonne journée

    • Partager sur Facebook
    • Partager sur Twitter
      5 décembre 2019 à 0:17:21

      C'est que tu as mal configuré l'utilisation de ta lib. Il faut détailler comme tu t'y prends.
      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2019 à 10:34:59

        Une bibliothèque statiques ne peut pas se lier à une autre bibliothèque. Cela signifie que si ta bibliothèque statique contient des références vers des fonctions d'une autre bibliothèque c'est à l'appelant de se lier à SFML de lui même.

        Exemple :

        • libDessin : statique, utilise des fonctions SFML
        • main : utilise libDessin, doit se lier à SFML.

        C'est un des gros inconvénients des bibliothèques statiques, elles ne sont pas transitivement dépendantes entre elles. En revanche elles sont faciles à utiliser et sont normées par POSIX.

        Pourquoi ? Parce qu'une bibliothèque statiques c'est juste un petit « sac » de fichier objets. Une bibliothèque partagée est un réel exécutable (ELF par exemple).

        -
        Edité par markand 6 décembre 2019 à 10:36:24

        • Partager sur Facebook
        • Partager sur Twitter

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

          7 décembre 2019 à 12:34:30

          eh bien voici mon code :

          classe utilisant le graph:

          #ifndef GRAPHICVIA_H
          #define GRAPHICVIA_H
          
          #include <VTS/Constantes.h>
          #include "TrigoCircle.h"
          #include <SFML/System.hpp>
          #include <SFML/Graphics.hpp>
          #include <Curve.h>
          #include <Graph.h>
          #include <vector>
          #include <iostream>
          
          
          class GraphicVIA
          {
              public:
                  GraphicVIA(sf::Vector2f pos, float width, bool circle = true);
                  virtual ~GraphicVIA();
                  void SetVoltage(TrigoCircle voltage) {m_voltage = voltage;}
                  void SetIntensity(TrigoCircle intensity) {m_intensity = intensity;}
                  void LoadGraph();
          
                  float GetIntensity(std::size_t index) {return m_intensity.GetCoord(index).y;}
                  float GetVoltage(std::size_t index) {return m_voltage.GetCoord(index).y;}
          
                  void start();
                  void update();
                  void draw(sf::RenderWindow *window);
          
          
              protected:
          
              private:
                  sf::Clock m_clock;
                  std::vector<Curve> m_curves;
                  TrigoCircle m_voltage;
                  TrigoCircle m_intensity;
                  Graph m_graph;
          
                  sf::Vector2f m_pos;
                  bool m_circle;
                  float m_width;
          };
          
          #endif // GRAPHICVIA_H
          

          classe Graph.h :

          #ifndef GRAPH_H
          #define GRAPH_H
          
          #include <VTS/Constantes.h>
          #include <Curve.h>
          #include <SFML/System.hpp>
          #include <SFML/Graphics.hpp>
          class Graph
          {
              public:
                  Graph();
                  Graph(float unitx, float unity, sf::Vector2f pos, vec::vec2 MinX_MaxX, vec::vec2 MinY_MaxY, float oriX, float oriY);
                  virtual ~Graph();
                  void Init(float unitx, float unity, sf::Vector2f pos, vec::vec2 MinX_MaxX, vec::vec2 MinY_MaxY, float oriX, float oriY);
          
                  void draw(sf::RenderWindow* window);
                  void draw(Curve* curve, float x);
          
                  void setPositon(sf::Vector2f newPos) {m_pos = newPos;
                                                        m_X.setPosition(m_pos);
                                                        m_Y.setPosition(m_pos);}
                  void setOriX(float x);
                  void setOriY(float y);
          
              protected:
          
              private:
          
                  float m_oriX;
                  float m_oriY;
          
                  sf::Vector2f m_pos;
                  vec::vec2 m_MinY_MaxY;
                  vec::vec2 m_MinX_MaxX;
                  float m_unitx;
                  float m_unity;
          
                  sf::RectangleShape m_X;
                  sf::RectangleShape m_Y;
          
                  std::vector<sf::VertexArray> m_tmpA;
          };
          
          #endif // GRAPH_H
          

          Classe Curve (courbe) :

          #ifndef CURVE_H
          #define CURVE_H
          
          #include <VTS/Constantes.h>
          #include <SFML/System.hpp>
          #include <SFML/Graphics.hpp>
          class Curve
          {
              public:
                  Curve(sf::Color color = sf::Color(0, 0, 0));
                  virtual ~Curve();
          
                  void addPt(sf::Vector2f pt);
                  sf::Vector2f GetPt(std::size_t index) {return m_pts[index].position;}
                  void delPt(std::size_t index);
                  sf::Color GetColor() {return m_color;}
          
              protected:
          
              private:
                  sf::VertexArray m_pts;
                  sf::Color m_color;
          
              friend class Graph;
          };
          
          #endif // CURVE_H
          

          et dans Curve et graph.lib j'utilise des fonction SFML graphic

          mon code est linké à SFML graphic et mon compilateur mon répond ceci:

          ||=== Build: Release in SimulationTension (compiler: GNU GCC Compiler) ===|
          include\GraphicVIA.h||In constructor 'GraphicVIA::GraphicVIA(sf::Vector2f, float, bool)':|
          include\GraphicVIA.h|42|warning: 'GraphicVIA::m_width' will be initialized after [-Wreorder]|
          include\GraphicVIA.h|41|warning:   'bool GraphicVIA::m_circle' [-Wreorder]|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp|3|warning:   when initialized here [-Wreorder]|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp||In member function 'void GraphicVIA::LoadGraph()':|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp|31|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp|35|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp||In member function 'void GraphicVIA::update()':|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp|54|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
          C:\Users\yolo\Desktop\CodesBocks\SFMLP\SimulationTension\src\GraphicVIA.cpp|56|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArray5clearEv'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArrayC1Ev'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArray5clearEv'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf6VertexC1ERKNS_7Vector2IfEE'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArray6appendERKNS_6VertexE'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArrayixEj'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArrayixEj'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZNK2sf11VertexArray14getVertexCountEv'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZNK2sf11VertexArray14getVertexCountEv'|
          C:\Program Files (x86)\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\..\..\..\libgraph.a(Curve.o):Curve.cpp|| undefined reference to `_imp___ZN2sf11VertexArray6resizeEj'|
          ||error: ld returned 1 exit status|
          ||=== Build failed: 11 error(s), 7 warning(s) (0 minute(s), 2 second(s)) ===|
          

          Voila merci pour votre aide





          • Partager sur Facebook
          • Partager sur Twitter
            9 décembre 2019 à 8:38:41

            Tu dois rajouter sfml-system aussi.
            • Partager sur Facebook
            • Partager sur Twitter

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

              11 décembre 2019 à 8:56:55

              Il est linké et inclu dans chaque fichier

              En tout cas il est linké dans les build options

              -
              Edité par Yolo974 11 décembre 2019 à 9:00:38

              • Partager sur Facebook
              • Partager sur Twitter

              utiliser une lib dans une autre

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown