Bonsoir à tous,
ce post s'adresse à ceux qui sont familiers avec SFML.
voilà après m'être bataillé un après midi, j'ai enfin réussi à compiler une petite appli SFML sous dev c++ . Seulement voilà, à l'exécution il ne se passe rien d'autre que le "system("PAUSE") ;" de la fin qui nous invite gentiment à taper sur le clavier et rentrez chez vous y'a plus rien à voir.
Alors comme je l'ai dit je suis sous dev c++, et plus généralement sous win XP (j'ai aussi codeblocks pour des applis sur microcontrolleurs, et comme le tuto SFML est fait pour codeblocks j'ai essayé cette voie là, j'ai rien réussi à en tirer.)
Donc voilà, j'ai bien mis tous les includes dans le bon dossier, les libs aussi, je me suis arraché les cheveux un bon moment avant de comprendre que quand dev c++ voyait "\lib\" dans ses chemins d'accès, il n'allait pas chercher "\lib\mingw\" tout seul comme un grand. J'ai commencé par les versions dynamiques des librairies, en mettant bien les dll dans mon répertoire projet et avec la #define SFML_DYNAMIC. Rien (enfin compilation OK mais c'est tout).
Du coup je suis passé aux versions statiques, et là il s'est enfin passé quelque chose : la compilation s'est bien passée, mais à l'exécution il manquait openAl32.dll . L'erreur corrigée, même chose : un exécutable muet.
Concrètement, c'est juste pour une appli audio, donc :
-lsfml-audio-s
-lsfml-system-s
sont linkés (enfin pour les versions statiques), dans cet ordre ;
openAl32.dll figure évidemment en bonne place dans le dossier projet ;
du coup on n'a plus besoin des autres dll mais je les ai quand même mises histoire d'être sûr (lbsndfile-1.dll,sfml-audio.dll,sfml-system.dll).
Le code test est :
Code C/C++ :
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Audio.hpp>
#include <iomanip>
#include <iostream>
////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Application exit code
///
////////////////////////////////////////////////////////////
int main()
{
// Load a sound buffer from a wav file
sf::SoundBuffer Buffer;
if (!Buffer.LoadFromFile("sound.wav"))
return EXIT_FAILURE;
// Display sound informations
std::cout << "sound.wav :" << std::endl;
std::cout << " " << Buffer.GetDuration() << " sec" << std::endl;
std::cout << " " << Buffer.GetSampleRate() << " samples / sec" << std::endl;
std::cout << " " << Buffer.GetChannelsCount() << " channels" << std::endl;
// Create a sound instance and play it
sf::Sound Sound(Buffer);
Sound.Play();
// Loop while the sound is playing
while (Sound.GetStatus() == sf::Sound::Playing)
{
// Display the playing position
std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << Sound.GetPlayingOffset() << " sec";
// Leave some CPU time for other threads
sf::Sleep(0.1f);
}
std::cout << std::endl;
// Wait until the user presses 'enter' key
std::cout << "Press enter to exit..." << std::endl;
std::cin.ignore(10000, '\n');
return EXIT_SUCCESS;
}
Et voilà au final aucun problème de compil, les headers sont détectés, les librairies aussi, et mon exé est muet. Même en ligne de commande.
(Note : un fichier "sound.wav" bidon est présent, et même si je supprime tout le code concernant les objets sf, et que je mets un cout, rien ne s'affiche .)
En fait après divers tests, je me suis rendu compte que le simple fait de lier ces librairies me sort des exécutables muets. Du genre je fais un "hello world" (même avec un #include d'un header SFML), nickel, mais quand je linke ces librairies, ça compile mais ... rien.
So WTF ?????????