2017-09-15 5 views
3

La sortie complète est ce (juste une erreur), et la libération construit ne semblent pas rencontrer le même problèmeLinker: « __fltused » est défini multiplier si je ne pas utiliser un flotteur dans le programme

SDL2.lib(SDL_stdlib.obj) : error LNK2005: __fltused already defined in LIBCMTD.lib(fltused.obj)` 

J'ai recompilé SDL2.lib avec/MTd et comme une bibliothèque statique, et je me suis assuré que c'était la seule bibliothèque de son nom sur mon système.

il devient bizarre que: Mettre une opération en virgule flottante partout dans mon programme lui permet de relier sans problème:

int main(int argc, char * argv[]) { 
    return 0; // will not link 
} 

int main(int argc, char * argv[]) { 
    float flt = 0.0f; // gets around optimization 
    return int(flt); // will link 
} 

Ce n'est pas idéal bien sûr, ce qui pourrait être la question sous-jacente?

+0

Ceci est un signe que vous liez à plus d'une version des bibliothèques d'exécution C. Vous avez dit que vous avez recompilé SDL2.lib avec/MTd; avec quoi votre application est-elle compilée? Il devrait être compilé avec/MTd, aussi. –

+0

@CodyGray - aye, SDL2 et mon exécutable sont tous les deux/MTd pour le débogage,/MT pour la sortie, j'ai triplé puisque cela semble être la raison la plus courante –

+0

C'est vraiment la seule chose que ça * peut * être. Le CRT est ce qui définit le symbole '__fltused'. Est-ce que vous liez dans * n'importe quel autre fichier LIB qui a pu être compilé avec une version différente des bibliothèques d'exécution? –

Répondre

0

Vous pouvez essayer ceci, d'après ce dont je me souviens, cela l'entoure.

#ifdef __cplusplus 
extern "C" { 
#endif 
int __fltused=0; 
#ifdef __cplusplus 
} 
#endif 
+0

Je suis désolé, je crains que cela ne fonctionne pas pour moi –

1

Le problème était lié à la façon dont SDL2 a été compilé.

Il ne suffit pas que la bibliothèque soit compilée avec les commutateurs/MTd ou/MT pour la liaison statique. La bibliothèque requiert également HAVE_LIBC lors de sa compilation, afin qu'elle soit liée de façon statique à l'exécution C correctement.