dnob700 Posté le 08 décembre 2005 à
sachant (pour la portabilité) que sous windows, sleep prend un durée qui est déjà en milliseconde.
j´utilise des fork et de pthread dans ce programme donc je pense que je peux faire une croix sur la portabilité...
ah...
Pour ce qui est de la lib, le problème vient bien de là : il ne trouve pas le fichier de la bibliothèque (lfmod.a je suppose). Est ce que le fichier .a est bien dans le dossier "lib" de ton compilo (si c´est celui là qui est utilisé) ?
Oui, elle est bien dedans...
(j´en profite pour demander un autre petit truc, existe il une commande pour étirer une image en sdl?)
j´ai suivi vraiment toutes les instructions et je ne pense pas avoir raté quelque chose.
Est ce que le fichier .a est bien dans le dossier "lib" de ton compilo (si c´est celui là qui est utilisé) ?
oui c´est bien celui que j´utilise au fait (dev c++)
J´ai pas mal réfléchi et je pense que le problème pourrait venir d´un fichier qu´il me manquerait dans le dossier "bin" de devCpp, car après avoir installé la sdl (qui était aussi un fichier .dll)j´avais du ajouter dans ce dossier un fichier, or il n´y a rien de cela avec fmod. Je suis vraiment coincé!
ton message d´erreur disait : "cannot find -llibfmod "
donc c´est ça le problème.
Pour éliminer un truc stupide, es-tu sur de l´orthographe ? (il y a deux l ?) .
si c´est pas ce genre de choses et que tout est bien là où il faut, alors je ne vois pas.
pour installer FMOD j´ai suivi ce petit tuto et ça a marcher du premier coup.
Compilation :
Allez télécharger la librairie FMOD sur le lien suivant :
http://www.fmod.org/ifmoddownload.html
le premier lien "fmodapi374win.zip (1,955kb)"
(ou supérieur si le site a été mis a jour)
Copiez les .h que vous trouverez dans API/INC dans un repertoire /fmod que vous créerez en
dessous de votre répertoire #include de visual C++ ou dev C++
Allez ensuite voir dans le repertoire API/LIB, copiez dans votre repertoire LIB
- fmodvc.lib si vous etes sous Visual C++
- libfmod.a si vous etes sous dev C++
Copiez fmod.dll que vous trouverez dans API (inutile de copier fmod64.dll pour le tuto)
dans le repertoire de votre projet.
Vous aurez besoin de linker la lib pour la compilation.
Pour visual C++, ajoutez la ligne :
#pragma comment(lib,"fmodvc.lib")
Pour Dev C++, rajoutez l´option de compilation -llibfmod
(voir installation de SDL pour + de détails, et adaptez...)
donc essaye ça et revient nous dire
dans gcc, quand on vuet linker avec libCOINCOIN.so, on specifie -lCOINCOIN
Je suis certain de l´orthographe! merci pour le tuto mais c´est justement celui que j´ai utilisé (provenant du site de JYY), j´ai copié/collé son tuto complet dans ma page devcpp comme je fais habituellement mais cette fois il refuse de compiler... par contre ma version de fmode ne faisait pas (1,955kb) mais un tout petit peu moins (sur mon ordi en non compressé ça fait 4.37 Mo)... Peut-être ça provient de ma version de devc++..
J´ai essayé de telecharger le fichier d´un autre lien (toujours sur la même page), pis je suis tombé sur un un programme d´installation donc c´est pas encore ce que je veux...(2.83 Mo)
Ohayo !
J´essaie de lancer un premier petit programme SDL sous Visual C++ Express, et BI-ZA-RE-MENT ça marche pas, dit !
Même si j´ai toujours eu des pépins en programmation (c´est pour ça que j´avance pas
), là je vois pas la raison qui fait ressortir autant d´erreurs du compilateur.
En gros j´ai suivi les étapes qu´on peut trouver dans les divers tutos sur l´installation de la SDL avec Visual Studio (properties -> Code generation -> debug DLL), et là je coince ^^
Lancement de MSDN help -> je lis
Error Message
unresolved external symbol ´symbol´ referenced in function ´function´
An undefined external symbol (symbol) was found in function. To resolve this error, provide a definition for symbol or remove the code that references it.
Je pense pouvoir dire que je suis bon en anglais, mais pour moi c´est de l´hébreux. MDR je sais même pas de quoi il me parle avec son symbole externe non résolu xD
Bref, je me reprends et scroll en bas de l´aide, avec quelques exemples dans les cas où cette erreur arrive, mais j´ai pas compris pourquoi leur code donnait cette erreur... ça m´aide donc pas.
C´est saoulant (voire décourageant) de bloquer dès qu´on fait une petite avancée dans l´apprentissage de la prog. Quand on cherche de l´aide sur le net, on ne trouve que des réponses avec des termes techniques. Je suis sûr que si je lisais mon bouquin à fond je pourrais les comprendre, mais avec un bouquin pareil ("Programmez en langage C++" éd. Eyrolles), où je dois relire plusieurs fois chaque phrase pour (essayer de) comprendre, vous comprenez que ça rebute. Du coup, je lis pas le livre => je connais pas les termes techniques de la prog => je comprends pas les messages d´erreur => j´avance pas.
Ca fait "gros râleur", mais ça me soulage
Bon allez je vais quand même coller quelques erreurs, même si j´ai peu de chances de comprendre l´hypothétique réponse qu´on va me donner ^^
main.obj : error LNK2019: unresolved external symbol _SDL_WM_SetCaption referenced in function "void __cdecl initSDL(void)" (?initSDL@@YAXXZ)
(plein d´autres erreurs LNK2019)
MSVCRT.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
En résumé, j´ai 10 erreurs lors du Build, et la compilation passe nikel sans warning.
J´ai créé un projet Console Win32 vide, et le code que je teste est pas de moi mais justement d´un tuto ;- )
Essaie de mettre les lignes
au début de ton code...
Koyo-K > pour les erreurs :
main.obj : error LNK2019: unresolved external symbol _SDL_WM_SetCaption referenced in function "void __cdecl initSDL(void)" (?initSDL@@YAXXZ)
fait comme t´a dit fenix : les libs ne sont pas linkées correctement.
Pour l´erreur :
MSVCRT.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
définis ton main ainsi :
int main(int argc,char** argv)
n´enleve pas les parametres d´entrée, meme si tu les ignores, prototypes ainsi ton main.
Evidemment, pour que ca marche, faut avoir spécifié les chemins "%SDL_Install_dir%\include" et "%SDL_Install_dir%\lib" dans les options de compilo, histoire qu´il sache bien où trouver les fichiers SDL. (Deja si la compil se passe sans prob, c´est qu´il trouve bien le dossier include, ou alors que t´as joué au porc, comme moi au débioute, c a d que t´as posé SDL.h dans ton rep "%vc_install_dir%\include").
Ah oui, exact, comme dit JeanYvesYves, SDL utilise la directive suivante:
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
donc si t´as un void main(void), ca passera pas, il te faut absolument un
int main(int cequetuveuxc, char* cequetuveux[]){
...
}
Moi y´a un truc marrant qui m´es arrivé, tout a l´heure...
J´ai une fonction d´affichage definie comme suit:
void display(SDL_Surface* screen, int* plateau, int sizeX, int sizeY){
// Fonction d´affichage.
SDL_Rect* up;
SDL_Surface* redp;
SDL_Surface* bluep;
redp = SDL_LoadBMP("red.bmp");
bluep = SDL_LoadBMP("blue.bmp");
up->x = 0;
up->y = 10;
up->w = (bluep->clip_rect).w;
up->h = (bluep->clip_rect).h;
[...]
}
et, lorsque je l´ai définie pour la premiere fois, elle plantait, alors que je l´avais définie:
void display(SDL_Surface* screen, int* plateau, int sizeX, int sizeY){
// Fonction d´affichage.
SDL_Surface* redp;
SDL_Surface* bluep;
SDL_Rect* up;
redp = SDL_LoadBMP("red.bmp");
bluep = SDL_LoadBMP("blue.bmp");
up->x = 0;
up->y = 10;
up->w = (bluep->clip_rect).w;
up->h = (bluep->clip_rect).h;
[...]
}
... En somme, si le SDL_Rect* est défini apres les SDL_surface*, ca plante...
J´ai tjs pas compris pkoi...
Je comprends plus rien...
Je rajoute une variable char str[512], ca plante.
Je definis up->x = 0, ca prend plus l´entrée clavier... :/)
Pour ce qui est du void main(int argc, char** argv), c´était fait.
Par contre je savais pas qu´on pouvait pas faire comme pour les include avec les lib, moi j´avais fait ça :
mais en mettant SDL.lib dans le répertoire avec toutes les autres ça marche, en ayant bien sûr changé la ligne ainsi :
Ca fait 9 erreurs en moins, m´en reste plus qu´une, et pas moindre :
LINK : fatal error LNK1104: cannot open file ´uuid.lib´
Avant je l´avais pas, mais bon je ne pouvais forcément pas m´en tirer juste avec une ligne fausse... les erreurs me suivent ![]()
le pragma comment c pas conseillé dans une build finale, parce que suivant le compilo utilisé, ca peut buguer. Donc efface ces lignes, et mets SDL.lib et SDLmain.lib dans les libs a inclure dans les .o de ton projet (Settings > link > tu ajoutes " SDL.lib SDLmain.lib" apres "kernel32.lib user32.lib [...]")
(le bug suivant le compilo, ca sera si justement, dans l´autre ide, l´ide a deja passé les librairies a lier en plus de ton code...)
Fenix[74] > il est normal que ton code plante :
tu fais :
SDL_Rect* up;
up->x = 0;
--> méchant plantage aléatoire en perpective : tu définis un pointeur que tu appelles up : ce pointeur, tu ne l´initialises pas : il peut pointer n´importe ou : et tu dis d´écrire dessus, ouille !! !!
Si tu veux quelque chose de correct, sois tu passes en statique :
SDL_Rect up;
up.x = 0;
Sois tu reste en dynamique, mais tu alloues :
SDL_Rect* up;
up = new SDL_Rect;
up->x = 0;
...
delete up;