Partage
  • Partager sur Facebook
  • Partager sur Twitter

wxwidgets linkage

absolu ou relatif ??

Sujet résolu
    3 septembre 2022 à 11:05:04

    Bonjour à tous. Je poste ce sujet car même après beaucoup de recherches, je n'arrive pas à faire fonctionner mon Makefile, sous wxwidgets. Pourriez-vous m'aider svp ?

    Mon makefile, fait pour choisir facilement entre debug et release:

    CXX = $(shell wx-config --cxx)
    WXFLAGS = `wx-config --cxxflags --libs`
    
    EXE = ipms.out
    SRCS = App.cpp Main.cpp
    OBJS = $(SRCS:.cpp=.o)
    #
    # Debug build settings
    #
    DBGDIR = debug
    DBGEXE = $(DBGDIR)/$(EXE)
    DBGOBJS = $(addprefix $(DBGDIR)/, $(OBJS))
    DBGCFLAGS = -g -O0 -DDEBUG
    
    #
    # Release build settings
    #
    RELDIR = release
    RELEXE = $(RELDIR)/$(EXE)
    RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
    RELCFLAGS = -O3 -DNDEBUG
    
    .PHONY: all clean debug prep release remake
    
    all: prep release
    
    
    #
    # Debug rules
    #
    
    debug: $(DBGEXE)
    
    $(DBGEXE): $(DBGOBJS)
    	$(CXX) $(WXFLAGS) $(DBGCFLAGS) -o $(DBGEXE) $^
    
    $(DBGDIR)/%.o: %.cpp
    	$(CXX) -c $(WXFLAGS) $(DBGCFLAGS) -o $@ $<
    
    #
    # Release rules
    #
    
    release: $(RELEXE)
    
    $(RELEXE): $(RELOBJS)
    	$(CXX) $(WXFLAGS) $(RELCFLAGS) -o $(RELEXE) $^
    
    $(RELDIR)/%.o: %.cpp
    	$(CXX) -c $(WXFLAGS) $(RELCFLAGS) -o $@ $<
    
    #
    # Other rules
    #
    prep:
    	mkdir -p $(DBGDIR) $(RELDIR)
    
    remake: clean all
    
    clean:
    	rm -f $(RELEXE) $(RELOBJS) $(DBGEXE) $(DBGOBJS)
    


    Pourtant, quand j'exécute cette commande:

    g++ Main.cpp App.cpp -I/usr/local/lib/wx/include/gtk3-unicode-3.2 -I/usr/local/include/wx-3.2 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -L/usr/local/lib -pthread   -lwx_gtk3u_xrc-3.2 -lwx_gtk3u_html-3.2 -lwx_gtk3u_qa-3.2 -lwx_gtk3u_core-3.2 -lwx_baseu_xml-3.2 -lwx_baseu_net-3.2 -lwx_baseu-3.2

    ça fonctionne, même avec les flags debug ou release. Je suis sous Linux et j'ai une page d'erreur si grande que je ne peux pas la faire apparaître en entier dans la console, avec des erreurs de linkage et à la fin:

    warning: creating DT_TEXTREL in a PIE

    je dis en sous-titre absolu ou relatif car êut etre que le chemin n'est pas bon à cuase d'une relativité du chemin.

    La compilation des .o fonctionne, mais pas la compilation de l'exécutable final.

    J'ai 4 fichiers plutôt typiques de wxwidgets : Main.cpp, App.cpp, Main.h et App.h.

    -
    Edité par gl-dev 3 septembre 2022 à 11:34:48

    • Partager sur Facebook
    • Partager sur Twitter
      4 septembre 2022 à 10:29:29

      Quelles sont les erreurs que tu as ? Parce que là, tu nous montres un warning sans rapport (apparemment) avec wxWidgets.
      • Partager sur Facebook
      • Partager sur Twitter

      Si vous ne trouvez plus rien, cherchez autre chose.

        4 septembre 2022 à 10:30:13

        Une grande quantité d'erreurs de linkage

        Je vais mettre une capture d'écran, c'est des référence indéfinie vers des classes et méthodes

        Mes erreurs

        Les fichiers se convertissent bien en .o, c'est affiché à la ligne de commande, c'est à la compilation finale que ça ne fonctionne pas.

        Merci pour ta réponse !

        -
        Edité par gl-dev 4 septembre 2022 à 10:36:02

        • Partager sur Facebook
        • Partager sur Twitter
          4 septembre 2022 à 10:52:28

          `make -n` donne quoi ?

          EDIT:

          J'aime bien séparer les flags de compilation et de link, tu as essayé de split WXFLAGS en deux ?

          -
          Edité par dragonjoker 4 septembre 2022 à 10:55:02

          • Partager sur Facebook
          • Partager sur Twitter

          Si vous ne trouvez plus rien, cherchez autre chose.

            4 septembre 2022 à 10:55:10

            ça:

            mkdir -p debug release
            g++ -c `wx-config --cxxflags --libs` -O3 -DNDEBUG -o release/App.o App.cpp
            g++ -c `wx-config --cxxflags --libs` -O3 -DNDEBUG -o release/Main.o Main.cpp
            g++ `wx-config --cxxflags --libs` -O3 -DNDEBUG -o release/ipms.out release/App.o release/Main.o

             je vais essayer pour voir mais je ne pense pas que ça va changer grand chose comme la chaine finale sera la même...

            ça donne ça :

            CXX = $(shell wx-config --cxx)
            WXFLAGS = `wx-config --cxxflags`
            WXLIBS = `wx-config --libs`
            
            EXE = ipms.out
            SRCS = App.cpp Main.cpp
            OBJS = $(SRCS:.cpp=.o)
            #
            # Debug build settings
            #
            DBGDIR = debug
            DBGEXE = $(DBGDIR)/$(EXE)
            DBGOBJS = $(addprefix $(DBGDIR)/, $(OBJS))
            DBGCFLAGS = -g -O0 -DDEBUG
            
            #
            # Release build settings
            #
            RELDIR = release
            RELEXE = $(RELDIR)/$(EXE)
            RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
            RELCFLAGS = -O3 -DNDEBUG
            
            .PHONY: all clean debug prep release remake
            
            all: prep release
            
            
            #
            # Debug rules
            #
            
            debug: $(DBGEXE)
            
            $(DBGEXE): $(DBGOBJS)
            	$(CXX) $(WXFLAGS) $(WXLIBS) $(DBGCFLAGS) -o $(DBGEXE) $^
            
            $(DBGDIR)/%.o: %.cpp
            	$(CXX) -c $(WXFLAGS) $(WXLIBS) $(DBGCFLAGS) -o $@ $<
            
            #
            # Release rules
            #
            
            release: $(RELEXE)
            
            $(RELEXE): $(RELOBJS)
            	$(CXX) $(WXFLAGS) $(WXLIBS) $(RELCFLAGS) -o $(RELEXE) $^
            
            $(RELDIR)/%.o: %.cpp
            	$(CXX) -c $(WXFLAGS) $(WXLIBS) $(RELCFLAGS) -o $@ $<
            
            #
            # Other rules
            #
            prep:
            	mkdir -p $(DBGDIR) $(RELDIR)
            
            remake: clean all
            
            clean:
            	rm -f $(RELEXE) $(RELOBJS) $(DBGEXE) $(DBGOBJS)
            



            -
            Edité par gl-dev 4 septembre 2022 à 11:00:18

            • Partager sur Facebook
            • Partager sur Twitter
              4 septembre 2022 à 10:59:58

              Et aussi, pourquoi pas de la forme :

              WXCXXFLAGS = $(shell wx-config --cxxflags)
              WXLDFLAGS = $(shell wx-config --libs)

              comme tu l'as fait pour CXX ?

              • Partager sur Facebook
              • Partager sur Twitter

              Si vous ne trouvez plus rien, cherchez autre chose.

                4 septembre 2022 à 11:01:59

                ah c'est une erreur, j'ai modifié, merci

                CXX = $(shell wx-config --cxx)
                WXFLAGS = $(shell wx-config --cxxflags)
                WXLIBS = $(shell wx-config --libs)
                
                EXE = ipms.out
                SRCS = App.cpp Main.cpp
                OBJS = $(SRCS:.cpp=.o)
                #
                # Debug build settings
                #
                DBGDIR = debug
                DBGEXE = $(DBGDIR)/$(EXE)
                DBGOBJS = $(addprefix $(DBGDIR)/, $(OBJS))
                DBGCFLAGS = -g -O0 -DDEBUG
                
                #
                # Release build settings
                #
                RELDIR = release
                RELEXE = $(RELDIR)/$(EXE)
                RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
                RELCFLAGS = -O3 -DNDEBUG
                
                .PHONY: all clean debug prep release remake
                
                all: prep release
                
                
                #
                # Debug rules
                #
                
                debug: $(DBGEXE)
                
                $(DBGEXE): $(DBGOBJS)
                	$(CXX) $(WXFLAGS) $(WXLIBS) $(DBGCFLAGS) -o $(DBGEXE) $^
                
                $(DBGDIR)/%.o: %.cpp
                	$(CXX) -c $(WXFLAGS) $(WXLIBS) $(DBGCFLAGS) -o $@ $<
                
                #
                # Release rules
                #
                
                release: $(RELEXE)
                
                $(RELEXE): $(RELOBJS)
                	$(CXX) $(WXFLAGS) $(WXLIBS) $(RELCFLAGS) -o $(RELEXE) $^
                
                $(RELDIR)/%.o: %.cpp
                	$(CXX) -c $(WXFLAGS) $(WXLIBS) $(RELCFLAGS) -o $@ $<
                
                #
                # Other rules
                #
                prep:
                	mkdir -p $(DBGDIR) $(RELDIR)
                
                remake: clean all
                
                clean:
                	rm -f $(RELEXE) $(RELOBJS) $(DBGEXE) $(DBGOBJS)
                


                même erreur par contre, que je ne pas exporter comme je l'ai dans un fichier texte

                -
                Edité par gl-dev 4 septembre 2022 à 11:04:57

                • Partager sur Facebook
                • Partager sur Twitter
                  4 septembre 2022 à 11:10:30

                  Du coup, tu peux n'utiliser que WXLIBS dans la commande de link, et n'utiliser que WXFLAGS dans la commande de compilation
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Si vous ne trouvez plus rien, cherchez autre chose.

                    4 septembre 2022 à 11:13:23

                    je l'ai fait, ce qui donne

                    CXX = $(shell wx-config --cxx)
                    WXFLAGS = $(shell wx-config --cxxflags)
                    WXLIBS = $(shell wx-config --libs)
                    
                    EXE = ipms.out
                    SRCS = App.cpp Main.cpp
                    OBJS = $(SRCS:.cpp=.o)
                    #
                    # Debug build settings
                    #
                    DBGDIR = debug
                    DBGEXE = $(DBGDIR)/$(EXE)
                    DBGOBJS = $(addprefix $(DBGDIR)/, $(OBJS))
                    DBGCFLAGS = -g -O0 -DDEBUG
                    
                    #
                    # Release build settings
                    #
                    RELDIR = release
                    RELEXE = $(RELDIR)/$(EXE)
                    RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
                    RELCFLAGS = -O3 -DNDEBUG
                    
                    .PHONY: all clean debug prep release remake
                    
                    all: prep release
                    
                    
                    #
                    # Debug rules
                    #
                    
                    debug: $(DBGEXE)
                    
                    $(DBGEXE): $(DBGOBJS)
                    	$(CXX) $(WXLIBS) $(DBGCFLAGS) -o $(DBGEXE) $^
                    
                    $(DBGDIR)/%.o: %.cpp
                    	$(CXX) -c $(WXFLAGS) $(DBGCFLAGS) -o $@ $<
                    
                    #
                    # Release rules
                    #
                    
                    release: $(RELEXE)
                    
                    $(RELEXE): $(RELOBJS)
                    	$(CXX) $(WXLIBS) $(RELCFLAGS) -o $(RELEXE) $^
                    
                    $(RELDIR)/%.o: %.cpp
                    	$(CXX) -c $(WXFLAGS) $(RELCFLAGS) -o $@ $<
                    
                    #
                    # Other rules
                    #
                    prep:
                    	mkdir -p $(DBGDIR) $(RELDIR)
                    
                    remake: clean all
                    
                    clean:
                    	rm -f $(RELEXE) $(RELOBJS) $(DBGEXE) $(DBGOBJS)
                    

                    et la même erreur de compilation

                    Merci pour cette correction, je croyais qu'il fallait tout tout le temps

                    -
                    Edité par gl-dev 4 septembre 2022 à 11:13:44

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 septembre 2022 à 11:15:14

                      Et du coup, `make -n` donne quoi, maintenant ?

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Si vous ne trouvez plus rien, cherchez autre chose.

                        4 septembre 2022 à 11:20:50

                         ça:

                        mkdir -p debug release
                        g++ -L/usr/local/lib -pthread   -lwx_gtk3u_xrc-3.2 -lwx_gtk3u_html-3.2 -lwx_gtk3u_qa-3.2 -lwx_gtk3u_core-3.2 -lwx_baseu_xml-3.2 -lwx_baseu_net-3.2 -lwx_baseu-3.2  -O3 -DNDEBUG -o release/ipms.out release/App.o release/Main.

                         et si je supprime les .o pour tout réinit:

                        mkdir -p debug release
                        g++ -c -I/usr/local/lib/wx/include/gtk3-unicode-3.2 -I/usr/local/include/wx-3.2 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -O3 -DNDEBUG -o release/App.o App.cpp
                        g++ -c -I/usr/local/lib/wx/include/gtk3-unicode-3.2 -I/usr/local/include/wx-3.2 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -O3 -DNDEBUG -o release/Main.o Main.cpp
                        g++ -L/usr/local/lib -pthread   -lwx_gtk3u_xrc-3.2 -lwx_gtk3u_html-3.2 -lwx_gtk3u_qa-3.2 -lwx_gtk3u_core-3.2 -lwx_baseu_xml-3.2 -lwx_baseu_net-3.2 -lwx_baseu-3.2  -O3 -DNDEBUG -o release/ipms.out release/App.o release/Main.o



                        -
                        Edité par gl-dev 4 septembre 2022 à 11:23:13

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 septembre 2022 à 12:54:35

                          $(WXLIBS) est à mettre après la liste des .o ou simplement à la fin (l'ordre est important).

                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 septembre 2022 à 15:40:48

                            Oooh... ça marche ! Merci beaucoup, jo_link_noir ! J'étais persuadé que l'ordre ne changeait rien !

                            L'exe final :

                            CXX = $(shell wx-config --cxx)
                            WXFLAGS = $(shell wx-config --cxxflags)
                            WXLIBS = $(shell wx-config --libs)
                            
                            EXE = ipms.out
                            SRCS = App.cpp Main.cpp
                            OBJS = $(SRCS:.cpp=.o)
                            #
                            # Debug build settings
                            #
                            DBGDIR = debug
                            DBGEXE = $(DBGDIR)/$(EXE)
                            DBGOBJS = $(addprefix $(DBGDIR)/, $(OBJS))
                            DBGCFLAGS = -g -O0 -DDEBUG
                            
                            #
                            # Release build settings
                            #
                            RELDIR = release
                            RELEXE = $(RELDIR)/$(EXE)
                            RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
                            RELCFLAGS = -O3 -DNDEBUG
                            
                            .PHONY: all clean debug prep release remake
                            
                            all: prep release
                            
                            
                            #
                            # Debug rules
                            #
                            
                            debug: $(DBGEXE)
                            
                            $(DBGEXE): $(DBGOBJS)
                            	$(CXX) $(DBGCFLAGS) -o $(DBGEXE) $^ $(WXLIBS)
                            
                            $(DBGDIR)/%.o: %.cpp
                            	$(CXX) -c $(WXFLAGS) $(DBGCFLAGS) -o $@ $<
                            
                            #
                            # Release rules
                            #
                            
                            release: $(RELEXE)
                            
                            $(RELEXE): $(RELOBJS)
                            	$(CXX) $(RELCFLAGS) -o $(RELEXE) $^ $(WXLIBS)
                            
                            $(RELDIR)/%.o: %.cpp
                            	$(CXX) -c $(WXFLAGS) $(RELCFLAGS) -o $@ $<
                            
                            #
                            # Other rules
                            #
                            prep:
                            	mkdir -p $(DBGDIR) $(RELDIR)
                            
                            remake: clean all
                            
                            clean:
                            	rm -f $(RELEXE) $(RELOBJS) $(DBGEXE) $(DBGOBJS)
                            



                            -
                            Edité par gl-dev 4 septembre 2022 à 15:42:15

                            • Partager sur Facebook
                            • Partager sur Twitter

                            wxwidgets linkage

                            × 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