Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/08/2006, à 01:59

Le Mérou

[Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Bonjour à tous !
Je suis débutant sous Linux et je fais un peu de C++
Via le gestionnaire de paquets Synaptic, j'ai installé les paquets correspondants à wxWidgets, soit :
- libwxgtk2.6-0
- libwxgtk2.6-dev
- wx2.6-doc
- wx2.6-examples
- wx2.6-headers
- wx2.6-il8n
- wx2.6-doc
- wx-common

Mais quand j'appelle wxWidgets comme ceci :

...
#include <wx>
...

ça ne compile pas. J'ai une erreur du genre :

main.cpp:12:14: erreur: wx : Aucun fichier ou répertoire de ce type
make: *** [main.o] Erreur 1

Je pense que le {PATH} pour que le compilateur trouve wxWidget n'est pas configuré comme il faut. Mais je ne sais pas comment faire ça...
Un peu d'aide SVP !

Dernière modification par Le Mérou (Le 09/08/2006, à 01:34)

Hors ligne

#2 Le 08/08/2006, à 16:53

trucutu

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Euh...
Je pense pas que cela soit <wx>....
Essaies plutôt <wx/wx.h> (vérifie sur internet)


La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !

Hors ligne

#3 Le 09/08/2006, à 00:34

Le Mérou

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

J'ai essayé avec :

#include <wx/wx.h>

Mais ça ne compile toujours pas...
Je pense que le problème doit venir d'un lien manquant entre la librairie wxWidgets et le compilateur en l'occurence : g++
Je voudrais savoir :
- Où se trouve la librairie de wxWidgets, installée via le gestionnaire de paquets Synaptic.
- Comment faire le lien entre cette librairie et le compilateur ( g++ )

Hors ligne

#4 Le 09/08/2006, à 01:32

Le Mérou

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Après des recherches bien difficiles, j'ai trouvé ceci :

Dans le fichier source, il faut la directive suivante :

#include "wx/wxprec.h"

Dans le Makefile pour compiler, j'ai ajouté cette instruction : `wx-config --cxxflags` cela donne :

g++  -o main.o -c `wx-config --cxxflags` main.cpp -Wall -ansi

Maintenant ça à l'air de fonctionner  !
J'ai pas tout compris, mais bon, vu que ça fonctionne.:rolleyes:

PS: Merci à Trucutu de m'avoir consacré un peu de son temps. smile

Hors ligne

#5 Le 09/08/2006, à 11:09

trucutu

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Merci à toi aussi d'avoir donné ta solution.
Cela pourra toujours être utile à quelqu'un à l'avenir.


La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !

Hors ligne

#6 Le 31/08/2006, à 22:28

aurels

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Oui en effet ça pourra servir à quelqu'un!

Bon, moi aussi j'ai tous ces paquets installés mais pas moyen de compiler un programme c++/wxWidgets avec g++. Que ce soit le "hello world" de wxwidgets.org ou tout autre tuto en ligne...
Plein d'erreurs du genre:

aurels@vogon:~/Coding/Cpp/wxTests$ g++ hworld.cpp `wx-config --libs` `wx-config --cxxflags` -o hworld
hworld.cpp: In member function ‘virtual bool MyApp::OnInit()’:
hworld.cpp:41: error: conversion from ‘const char [12]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp: In constructor ‘MyFrame::MyFrame(const wxString&, const wxPoint&, const wxSize&)’:
hworld.cpp:52: error: conversion from ‘const char [10]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp:54: error: conversion from ‘const char [6]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp:57: error: conversion from ‘const char [6]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp:62: error: conversion from ‘const char [22]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp: In member function ‘void MyFrame::OnAbout(wxCommandEvent&)’:
hworld.cpp:73: error: conversion from ‘const char [39]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp:73: error: conversion from ‘const char [18]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:642: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:632: note:                 wxString::wxString(int) <near match>
hworld.cpp: In function ‘int main()’:
hworld.cpp:76: error: declaration of C function ‘int main()’ conflicts with
hworld.cpp:37: error: previous declaration ‘int main(int, char**)’ here
aurels@vogon:~/Coding/Cpp/wxTests$

pour la source:

/*
 * hworld.cpp
 * Hello world sample by Robert Roebling
 */

#include "wx/wxprec.h"
#include "wx/wx.h" 

class MyApp: public wxApp
{
    virtual bool OnInit();
};

class MyFrame: public wxFrame
{
public:

    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);

    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);

    DECLARE_EVENT_TABLE()
};

enum
{
    ID_Quit = 1,
    ID_About,
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(ID_Quit, MyFrame::OnQuit)
    EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( "Hello World", wxPoint(50,50), wxSize(450,340) );
    frame->Show(TRUE);
    SetTopWindow(frame);
    return TRUE;
} 

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
    wxMenu *menuFile = new wxMenu;

    menuFile->Append( ID_About, "&About..." );
    menuFile->AppendSeparator();
    menuFile->Append( ID_Quit, "E&xit" );

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, "&File" );

    SetMenuBar( menuBar );

    CreateStatusBar();
    SetStatusText( "Welcome to wxWindows!" );
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(TRUE);
}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
    wxMessageBox("This is a wxWindows Hello world sample",
        "About Hello World", wxOK | wxICON_INFORMATION, this);
}

Voilà... Si quelqu'un avait un exemple ou une explication à ça... merci.

Hors ligne

#7 Le 31/08/2006, à 23:33

Le Mérou

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Salut,
En fait le problème ne vient pas de la compilation, mais de ton code. L'exemple que tu utilises doit probablement provenir d'une version wxWidgets antérieure à celle que tu as installée.

Essaie de modifier ton code pour que tes chaînes soient comme ceci : _("Ma chaîne")
exemple :

bool MyApp::OnInit()  // Ce code ne fonctionne pas
{
    // ...
    MyFrame *frame = new MyFrame( "Hello World", wxPoint(50,50), wxSize(450,340) );
    // ...
}

bool MyApp::OnInit()  // Ce code fonctionne bien
{
    // ...
    MyFrame *frame = new MyFrame( _("Hello World"), wxPoint(50,50), wxSize(450,340) );
    // ...
}

Les chaînes wxString s'écrivent comme ça
On peut même écrire de la façon suivante (il y une différence subtile, mais je ne sais pas laquelle):

_T("Hello World")

Modifie toutes tes chaînes
J'éspère que ça va fonctionner maintenant.

Hors ligne

#8 Le 31/08/2006, à 23:48

aurels

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Merci de ta réponse (très rapide en plus!).

En effet plus d'erreur de compilation après modification, la fonction _(char**) sert pour l'internationnalisation je suppose non?

Comme je le disais la compilation passe mais le fichier objet main.o généré n'est pas exécutable...

Si je l'exécute tel-quel j'ai:

aurels@vogon:~/Coding/Cpp/wxTests$ ./main.o
bash: ./main.o: Permission denied

et même si je fais ceci:

aurels@vogon:~/Coding/Cpp/wxTests$ chmod +x main.o
aurels@vogon:~/Coding/Cpp/wxTests$ ./main.o
bash: ./main.o: cannot execute binary file

As-tu déjà-eu ce problème? Mauvais paramètres pour gcc?

Merci encore à toi.

Hors ligne

#9 Le 01/09/2006, à 00:17

aurels

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Re!

Après des recherches, le problème venait effectivement de la commande de compilation.

Si je sépare la compilation du "linkage":

g++ `wx-config --cflags` -Wall -c main.cpp
g++ `wx-config --libs` -o monexe main.o
./monexe

l'exécutable est bien fonctionnel...
Voilà, je ne connais pas bien GCC donc je ne sais pas trop quoi mais ça marche en tout cas! (je viens en fait de wxPython).

Content de ne pas être le seul à jouer avec cette librairie sur ce forum! Salut.

Hors ligne

#10 Le 01/09/2006, à 02:03

Le Mérou

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Pour des projets plus important je te conseille d'utiliser un fichier Makefile
Voici le lien d'un trés bon tutoriel sur ces Makefile.
http://gl.developpez.com/tutoriel/outil/makefile/#L2.1

Pour ton exemple tu peux utiliser celui ci-dessous
(a placer dans le même répertoire que ton fichier source) :
puis dans la console tu tape : make

# File:		Makefile for samples
# Author:	Robert Roebling
# Created:	1999
# Updated:	
# Copyright:	(c) 1998 Robert Roebling
#
# This makefile requires a Unix version of wxWindows
# to be installed on your system. This is most often
# done typing "make install" when using the complete
# sources of wxWindows or by installing the two
# RPM packages wxGTK.XXX.rpm and wxGTK-devel.XXX.rpm
# under Linux.
#
# Makefile

CXX = $(shell wx-config --cxx)
PROGRAM = monexe
OBJECTS = $(PROGRAM).o

# implementation
.SUFFIXES:	.o .cpp
.cpp.o :
	$(CXX) -c `wx-config --cxxflags` -o $@ $<

all:    $(PROGRAM)

$(PROGRAM):	$(OBJECTS)
	$(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs`

clean: 
	rm -f *.o $(PROGRAM)

En fait c'est un makefile fourni avec les exemples wxWidgets

Hors ligne

#11 Le 01/09/2006, à 02:14

aurels

Re : [Résolu] wxWidgets - Comment lier la bibliothèque wxWidgets

Merci pour ces conseils et bonne nuit hein!

Hors ligne