HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011
-
22 juin 2007 à 14:51
HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011
-
25 juin 2007 à 21:54
Bonjour,
J'essaye de virer la C Run Time de mon prog en suivant la procédure suivante :
(sous Visual C++)
- Sous Linker/Input, "Ignore All Default Libraries" => Yes
- C/C++/Code Generation, "Buffer Security Check" => No
- Linker/Advanced, "Entry Point" => MyWinMain
Avec ça j'ai 2 erreurs de linkage sur memset et chkst qui sont 2 fonctions que je n'utilise pas dans mon prog.
En fait dans mon MyWinMain j'appel juste une boite de dialogue et j'ai l'impression que c'est l'appel à la fonction DialogBox qui cause l'erreur car quand je vire cet appel je n'ai plus d'erreur.
J'ai vu dans le code de BruNews qu'il utilisait uniquement de l'ASM dans son Main pour faire l'appel à la fonction DialogBoxParam, moi je n'ai utilisé que du c++, si l'erreur viens de la, faut il obligatoirement utiliser de l'ASM dans le Main pour virer la CRT ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 juin 2007 à 16:54
"Ignore All Default Libraries" remet le à No
Va dans C/C++->Génération de code->"Bibliothèque Runtime" et change pour Multithread
Change aussi "Vérification de la sécurité de la mémoire tampon" pour non
warnings "CRT section exists" dit que des 'memset' ou autres trucs de ce genre ont été insérés.
Souvent dus à ce genre de code:
UNESTRUCT t = {0};
tu vires et tu initialises membre à membre.
HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011 22 juin 2007 à 17:35
Merci beaucoup [auteurdetail.aspx?ID=617077 SAKingdom]ça compile, en fait c'était le
"Ignore All Default Libraries" à mettre à NO sinon le reste c'était bon.
Par contre j'ai 2 Warnings :
1>LIBCMT.lib(mathfcns.obj) : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
1>LIBCMT.lib(cpu_disp.obj) : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 22 juin 2007 à 18:27
Salut,
Je pense que pour pouvoir virer complétement la CRT il faut travailler en C pur (pas de C++). Voici un exemple de code source avec les options de compilation et linkage que tu peux examiner: Indicateur RAM
Voici un petit débat qui devrait t'interesser: ICI
Vous n’avez pas trouvé la réponse que vous recherchez ?
NairodDorian
Messages postés130Date d'inscriptionlundi 26 juin 2006StatutMembreDernière intervention18 août 2008 22 juin 2007 à 23:03
Bonsoir,
Juste pour ajouter de la precision la doc dit :
The /NODEFAULTLIB option tells the linker to remove one or more default libraries from the list of libraries it searches when resolving external references.
[...]
If you use /NODEFAULTLIB, for example, to build your program without the C run-time library, you may have to also use /ENTRY to specify the entry point (function) in your program.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 25 juin 2007 à 11:56
return v;
c'est CRT qui assure ExitProcess(v) pour quitter.
Gaffe que sans CRT le prog restera en mémoire dans de nombreux cas sans appel explicite ExitProces().
HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011 25 juin 2007 à 21:09
J'ai un doute sur les fonctions GlobalAlloc et CopyMemory, se sont bien des API WIN32 ? ou alors c'ést lié a la CRT ? parce que la j'ai le fameux message d'erreur : "warning LNK4210: .CRT section exists;" et quand je vire l'une ou l'autre de ces 2 fonction plus de message, cela dit la fonction CopyMemory est présente à plusieurs endroits de mon application et ne cause pas de problème, je ne pense pas que ça soit elle le problème.
HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011 25 juin 2007 à 21:25
Oui justement c'est pour le ClipBoard que je l'utilise, c'est donc CopyMemory qu'il faut virer...c'est bizar qu'il me mette pas le message "warning LNK4210" alors que je l'ai utilisée a plusieurs reprises. Idem pour SecureZeroMemory, et toutes les fonctions associées ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 25 juin 2007 à 21:41
Tu ne vas quand meme pas faire un appel externe pour une copie mémoire ???
On va copier une struct dans un autre buffer:
DWORD *c, *d, len;
len = sizeof(BNSTRUCT) / 4; // par DWORDs
c = (DWORD*) &bnstruct;
c = (DWORD*) buffer;
do {
*d++ = *c++;
} while(--len);