problème de compilation wxWidgets

Le problème exposé dans ce sujet a été résolu.

Bonjour, je suis le tuto d’OpenClassroom Le problème est que je n’arrive pas à compiler wxWidgets en tapant ce code dans le cmd de msys64 shell :

mingw32-make.exe –f makefile.gcc BUILD=release MONOLITHIC=0 UNICODE=1 SHARED=1 USE_OPENGL=1 USE_ODBC=1

Je ne le fais pas dans le cmd classique Windows car il ne reconnait même pas le chemin, je pense que c’est du au fait que le chemin de mingw32 est C:\msys64\mingw64\mingw32. Et voici l’erreur afficher :

mingw32-make: *** No rule to make target '▒f'.  Stop.

J’ai fait quelques recherche, d’après ce que j’ai vue l’erreur est du au manque de règle pour créer "rules" mais je ne sais pas comment les définir. Aidez-moi SVP :'(

+0 -0

Bonjour ,

Problème similaire avez vous testé ceci:

Vous avez probablement copié -collé la commande à partir d’un navigateur? Dans ce cas, le signe moins «-» que vous voyez est probablement un trait d’union (un caractère unicode différent, indiscernable pour la plupart). Notez ci-dessous comment le «-» est transformé en une boîte carrée. Modifiez votre commande, supprimez le moins et entrez-le à nouveau.

source : https://www.eclipse.org/forums/index.php/t/8990/

+0 -0

Merci @Marycha sa a marcher :D Et j’ai une autre question, comme je l’ai dit dans mon premier message je suis un tuto sur openclassroom et je dois insérer un code de base dans 2 nouvelles class créer, les class sont "MyApp.h et MyApp.cpp" sauf que j’ai essayer mais sa m’affiche une erreur à la compilation, une erreur que voici : C:\msys64\mingw64\x86_64-w64-mingw32\include\vadefs.h|18|error: expected unqualified-id before string constant|

code de base à insérer dans la class MyApp.h :

// Un petit "Guard-Block" afin d'éviter les inclusions multiples
#ifndef MYAPP_H_INCLUDED
#define MYAPP_H_INCLUDED

// Le header wxWidgets de base
#include <wx/wx.h>

// Déclaration de notre classe dérivée de wxApp
class MyApp : public wxApp
{
    public:
        // Une seule méthode pour l'instant
        virtual bool OnInit();
};

// On n'oublie pas de déclarer cette classe comme étant la classe principale
DECLARE_APP(MyApp);

// Et on n'oublie pas également de refermer le "Guard-Block"
#endif //MYAPP_H_INCLUDED

code de base à insérer dans la class MyApp.cpp :

// On appelle le fichier de déclaration de notre classe
#include "myapp.h"

// La macro pour rediriger l'exécution vers notre classe
IMPLEMENT_APP(MyApp);

// L'implémentation de la méthode OnInit
bool MyApp::OnInit()
{
    // On affiche une petite boite de dialogue
    wxMessageBox(_T("Bienvenue sur wxWidgets !"));
    // On retourne false pour que le programme se termine bien
    return false;
}

code de la class MyApp.h :

#ifndef MYAPP_H
#define MYAPP_H


class MyApp
{
    public:
        MyApp();
        virtual ~MyApp();

    protected:

    private:
    
};

#endif // MYAPP_H

code de la class MyApp.cpp :

#include "MyApp.h"

MyApp::MyApp()
{
    //ctor
}

MyApp::~MyApp()
{
    
    //dtor
}

voici comment j’ai insérer le code de base dans MyApp.h

#ifndef MYAPP_H
#define MYAPP_H


class MyApp
{
    public:
        MyApp();
        virtual ~MyApp();

    protected:

    private:
    // Un petit "Guard-Block" afin d'éviter les inclusions multiples
#ifndef MYAPP_H_INCLUDED
#define MYAPP_H_INCLUDED

// Le header wxWidgets de base
#include <wx/wx.h>

// Déclaration de notre classe dérivée de wxApp
class MyApp : public wxApp
{
    public:
        // Une seule méthode pour l'instant
        virtual bool OnInit();
};

// On n'oublie pas de déclarer cette classe comme étant la classe principale
DECLARE_APP(MyApp);

// Et on n'oublie pas également de refermer le "Guard-Block"
#endif //MYAPP_H_INCLUDED
};

#endif // MYAPP_H

et voici comment j’ai insérer le code de base dans MyApp.cpp :

#include "MyApp.h"

MyApp::MyApp()
{
    //ctor
}

MyApp::~MyApp()
{
    // On appelle le fichier de déclaration de notre classe
#include "myapp.h"

// La macro pour rediriger l'exécution vers notre classe
IMPLEMENT_APP(MyApp);

// L'implémentation de la méthode OnInit
bool MyApp::OnInit()
{
    // On affiche une petite boite de dialogue
    wxMessageBox(_T("Bienvenue sur wxWidgets !"));
    // On retourne false pour que le programme se termine bien
    return false;
}

    //dtor
}

je Suppose que l’erreur viens du fichier dans le chemain est citée dans l’erreur mais je ne sais pas ce que sais exactement ou si mon code est bon. Pouvais vous m’aidez SVP ?

+0 -0

Bonjour ,

De connaisseur il semblerais d’excellente qualité avec de bonne pratique à avoir. je m’y suis intéressé car je chercher à implémenter des classes ( car je fait du c pour arduino ) je ne les ai pas trouvé, mon seul regret mais je pense que la suite arrive? @informaticienzero , @mehdidou99

Les base offerte de ce cour semble très solide.

Pour revenir à ton problème je n’ai pas beaucoup d’experience mais voila comment je fait pour crée une classe qui hérite d’une autre.

maClasse.h

#ifndef MACLASSE_H_
#define MACLASSE_H_


#include<librairie.h> // en l’occurrence pour toi elle semble s'appeler: wx/wx.h

class Ma_classe : public nomDeLaClasseHerite // la aussi chez toi ce serais wxApp 

private :
 // mes attribut et méthode privé

protected:
 // attribut et méthode propre a la classe qui pourrons être hérite aux autre classes

public:
// mon constructeur qui reprend les attributs de la classe dont elle hérite plus les nouveaux 
// ça je ne le vois pas dans ton exemple 
// puis après tes modules et attribut public 
// je n'en mets pas plus je sais pas si c'est correct mais cela fonctionne 

#endif
``
dans le fichier maClasse.cpp

```cpp
#include "maClasse.h"

Ma_classe::Ma_classe(): nomDeLaClasseHerite()
{
// ici instantiation de tes nouveaux attributs
 
}

Voilas il y a peu être des choses à redire sur ma méthode pour le moment elle fonctionne.

Un dernier mots je ne sais pas ce que tu utilise comme ide ou os mais je te conseille d’en prendre un vrai qui te feras la compilation et le debug.

Visual studio -> windows

Code::Block , Vim -> linux

+0 -0

De connaisseur il semblerais d’excellente qualité avec de bonne pratique à avoir. je m’y suis intéressé car je chercher à implémenter des classes ( car je fait du c pour arduino ) je ne les ai pas trouvé, mon seul regret mais je pense que la suite arrive? @informaticienzero , @mehdidou99

Marycha

Tu peux accéder a la version beta ici : https://zestedesavoir.com/forums/sujet/3703/la-programmation-en-c-moderne

+0 -0

Un fichier de la librairie wx s’ouvre tous seul après la compilation l’erreur qui s’affiche est C:\wxWidgets-3.1.3\include\wx\defs.h|718|error: use of old-style cast to 'size_t' {aka 'long long unsigned int'} [-Werror=old-style-cast]| ligne 718 du fichier voici le code afficher a cette ligne :

#define wxNO_LEN ((size_t)-1)

Meme erreur dans le fichier buffer.h que voici : C:\wxWidgets-3.1.3\include\wx\buffer.h|231|error: use of old-style cast to 'wxScopedCharTypeBuffer<T>::CharType*' [-Werror=old-style-cast]|

et voici le code a la ligne 231

 static CharType *StrCopy(const CharType *src, size_t len)
    {
        CharType *dst = (CharType*)malloc(sizeof(CharType) * (len + 1));
        if ( dst )
            memcpy(dst, src, sizeof(CharType) * (len + 1));
        return dst;
    }
+0 -0

Je pense que déjà tu demandes trop de choses à ta directive de préprocesseur

Je ne vois pas ce que tu veux faire. Si c’est copier une chaîne de caractère dans une autre tu as :

/* strcpy example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str1[]="Sample string";
  char str2[40];
  char str3[40];
  strcpy (str2,str1);
  strcpy (str3,"copy successful");
  printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
  return 0;
}
 

source : http://www.cplusplus.com/reference/cstring/strcpy/

De plus attention le type static ne fonctionne qu’une fois à la compilation. Pour finir voila comment utiliser malloc : http://www.cplusplus.com/reference/cstdlib/malloc/

Moi j’utilise calloc ( j’ai mieux compris son fonctionnement ) :http://www.cplusplus.com/reference/cstdlib/calloc/

+0 -0

Bonjour,

Pour le warning, si c’est dans la bibliothèque wxWidgets, il n’y a rien à faire. C’est aux auteurs de wxWidgets de corriger s’il y a lieu. Sachant que ça ne sera probablement jamais corrigé car 1/ce n’est pas gravissime, 2/wxWidgets est énorme et clairement osef, et 3/wxWidgets a plus de 20 ans et donc c’est normal que certains bouts de code ne soient plus au top.

Vérifie que tu compiles dans la bonne version de C++ (je n’ai pas ce warning en C++17), ou sinon ignore-le. C’est tout.

Pour ton premier problème, revois tes cours de base. IL ne s’agit pas de faire un bête copier-coller, mais d'intégrer le code. Tu l’as collé n’importe où et du coup ça fait n’importe quoi, c’est aussi simple que ça.

+0 -0

Merci de t’a réponse @quentin

Pour ton premier problème, revois tes cours de base. IL ne s’agit pas de faire un bête copier-coller, mais d'intégrer le code. Tu l’as collé n’importe où et du coup ça fait n’importe quoi, c’est aussi simple que ça.

QuentinC

J’ai corriger le probléme, dans menu -> "project" -> "build options" -> "compiler settings" -> sous onglet "compiler flags" j’ai cocher "…[-std= c++17]" et "…(aka C++17)…"

Pour le warning, si c’est dans la bibliothèque wxWidgets, il n’y a rien à faire. C’est aux auteurs de wxWidgets de corriger s’il y a lieu. Sachant que ça ne sera probablement jamais corrigé car 1/ce n’est pas gravissime, 2/wxWidgets est énorme et clairement osef, et 3/wxWidgets a plus de 20 ans et donc c’est normal que certains bouts de code ne soient plus au top.

Vérifie que tu compiles dans la bonne version de C++ (je n’ai pas ce warning en C++17), ou sinon ignore-le. C’est tout.

QuentinC

Comment on fait pour ignorer/desactiver une erreur et moi je compile en c++17 ?

Parce que moi je suis aller dans menu -> "project" -> "build options" -> "compiler settings" -> sous onglet "compiler flags" puis j’ai décocher tous les warnings mais ça ne marche toujours pas.

+0 -0

Comment on fait pour ignorer/desactiver une erreur

C’est indiqué dans Le message comment le désactiver. IL faut ajouter l’option (sans les crochets):
[-Werror=old-style-cast]

Mais je désactiverais totalement l’option -Werror. Ca transforme tous les warnigns en erreurs, ce qui fait échouer la compilation. Le mode warning ultra nazi est très utile pour les débutants, mais je pense que tu n’auras pas le choix dans ce cas-ci.

Le fait est que le message provient du code de la bibliothèque. Tu n’es en rien fautif. Donc il faut faire avec… A moins bien sûr que tu saches comment régler le problème, auquel cas il serait sans doute utile de leur envoyer une merge request.

+0 -0

Pour ne pas avoir les avertissements des bibliothèques, il faut indiquer les chemins avec -isystem plutôt que -I. C’est une configuration de l’IDE/système de build.

Ah, c’est un bon truc à savoir ça; je ne savais pas.

Je n’utilise pas cette option mais par habitude j’ai directement mis les headers de wx dans le dossier adéquat, du coup c’est sans doute pour ça que je n’ai aucun warning de mon côté.

+0 -0

Je n’utilise pas cette option mais par habitude j’ai directement mis les headers de wx dans le dossier adéquat, du coup c’est sans doute pour ça que je n’ai aucun warning de mon côté.

QuentinC

Probablement, le compilateur est configuré pour chercher les fichiers "système" dans un certains nombres de dossier prédéfinit qui peuvent être affichés avec g++ -v -E fichier_vide.cpp.

Quel chemin ? Parce que je n’indique pas de chemin avec -I désoler si la question est un peu débile, mais je débute :-°

cerveau

Vu le chemin de la lib, il y a forcément quelque part une configuration qui a été faite pour l’indiqué. L’IDE à tendance à cacher les options du compilateur, mais derrière il utilise -I.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte