Quand j'utilise Qt (V4.7.4) et Boost (essayé V1.47 et V1.48) dans mon projet C ++, j'obtiens une erreur de liaison causée par une classe comprenant Ceci est le message d'erreur: p>
... obj: Erreur LNK2001: Symbole externe non résolu "Privé: Statique Classe STD :: Codecvt Const * & __CDecl boost :: FileSystem3 :: chemin :: wchar_t_codecvt_facet (void)" (? wchar_t_codecvt_facet @ path @ FileSystem3 @ boost @@ caaapbv? $ Codecvt @ gdh @ std @@ xz) p>
... obj: Erreur LNK2001: Symbole externe non résolu "Void __cdecl boost :: FileSystem3 :: PATH_TRAITITS :: Convertir (Char Const *, Constons *, classe STD :: basique_string, classe STD :: Allocator> &, Classe STD :: CODECVT Const &) "(? Convertir @ path_traits @ FileSystem3 @ keySystem3 @ boost @@ yaxpbd0aav? $ basic_string @ g @ g @ g @ g @ @ @ @@ ABV? $ codecvt @ gdh @ 5 @@ z) p>
... Obj: Erreur LNK2001: Symbole externe non résolu "Void __cdecl boost :: FileSystem3 :: Path_Traits :: Dispatch (Classe Boost :: FilesSystem3 :: Directory_entry const &, classe STD :: basique_string, classe std :: allocator > &, CLASS STD :: CODECVT Const &) "(? Dispatch @ path_traits @ filesSystem3 @ boost @@ yaxabvdirectory_ientry @ 23 @ aav? $ basic_string @ g @ g @@ v? $ allocator @ g @ 2 @@ std @@ abv? $ codecvt @ gdh @ 6 @@ z) p>
... obj: Erreur LNK2001: Symbole externe non résolu "Void __cdecl boost :: FileSystem3 :: Path_Traits :: Convertir (non signé Const *, STD STD *, STD STD :: basique_string, classe STD :: Allocator> &, classe STD :: Codecvt const &) "(Convert @ path_traits @ filesSystem3 @ boost @@ yaxpbg0aav? $ basic_string @ d @ star_traits @ d $ allocator @ d @ 2 @@ Abv? $ Codecvt @ gdh @ 5 @@ z) p>
... EXE: Erreur fatale LNK1120: 4 externes non résolus p>
blockQuote>
EDIT: B> P>
ici j'ai trouvé quelqu'un avoir ce problème à venir cette conclusion: p>
Ceci est vraiment un problème QT. En utilisant wchar_t comme type natif que vous devez
Recompiler QT en utilisant le même commutateur de compilateur. Il y a même un bug dans le
Tracker: https://bugreports.qt.io/browse/qtbug-9617 < / p>
En général, vous devrez faire très attention et ne pas mélanger WCHAR_T
Paramètres du compilateur dans vos projets car ils deviendront incompatibles. P>
blockQuote>
donc je recompilé Réglage QT
/ ZC: wchar_t code>, mais cela n'a montré aucun effet. Je reçois toujours la même erreur. p>
3 Réponses :
QT a probablement changé la tipologie de votre programme en ce qui concerne la configuration du temps d'exécution: par conséquent, la bibliothèque de boost que vous utilisez (système de fichiers), qui vient dans de nombreuses configurations accédées par la convention de dénomination - connot être trouvé. P>
Par exemple, les roulements multithread nécessitent mt em> quelque part dans le nom de la bibliothèque (j'espère que je me souviens bien, mais de toute façon voir les documents où les détails sont entièrement documentés). Cette nommée est assez transparente au programmeur, en raison de pragmas qui stimulent les programmeurs de manière appropriée pour faciliter l'utilisation de la bibliothèque sous différents compilateurs. P>
Vous devez manquer le système de fichiers non-WCHAR.Lib. Lorsque j'utilisais Windows, j'ai utilisé Boost Jam pour interfacer avec Visual C ++ (peut être qui remonte au passé millénaire em>!). J'espère que c'est toujours utilisable. P>
Je ne suis pas sûr de comprendre. J'ai ajouté boost_filesystem-vc100-mt-1_47.lib code> à mes dépendances et
$ (boost) \ state \ lib code> aux répertoires. Les chemins sont vraiment corrects, je les ai copiés d'un autre projet, qui compilait sans erreurs. J'ai vérifié la propriété
Runtime Library Code> de toutes mes feuilles et elles sont toutes définies sur
DLL multithreaded (/ MD) CODE>, comme dans mon autre projet. Puisque ces paramètres sont les mêmes, je suppose que cela ne peut pas être un problème de nommage, ou je me trompe?
Désolé, j'ai mal tourné à Multhread, et donc MT I>, vous avez clairement expliqué que c'était un changement de type de caractère. J'espère pouvoir vérifier mon hipotèse dans Boost, détail technique approprié.
Je pense que vous êtes sur la bonne voie, mais cela ressemble à votre Lorsque vous construisez votre projet qui utilise QT et Boost, vous devez voir cette option dans la sortie du compilateur. Quelque chose comme: p> Si vous avez déjà construit qt sans cette option, vous devrez peut-être avoir à faire un Ça sonne comme - ZC: wchar_t sera la valeur par défaut dans qt 5 . p> p> -zc: wchar_t code> n'a pas "collé". Nous avons dû faire la même chose pour rendre Qt heureux avec Google Breakpad et la bibliothèque ICU. Nous avons modifié le
/ zc: wchar_t code> paramètres dans
(qt_source) \ mkspecs \ win32-msvc2008 \ qmake.conf code> et compilé qt de la source et après que tout fonctionne.
faire conflclean code> d'abord pour que tout vraiment em> est reconstruit avec les nouveaux paramètres. p>
Utiliser Boost-1.49, Qt 4.4 et VS2005 avaient le même problème. Aller aux propriétés du projet, puis régler "Propriétés de configuration -> C / C ++ -> Langue -> Traiter wchar_t comme type intégré" sur "Oui" Correction du problème. P>
Avez-vous compilé Boost? Je ne suis pas trop familier avec ce qui nécessite exactement la construction, mais certaines bibliothèques font.
Oui. Je l'ai compilé pour Visual Studio 2010 en utilisant
b2.exe code> si je me souviens bien.
pourrait-il être nécessaire de recompiler toute la bibliothèque de boost? Je ne me souviens pas de la configuration de construction exacte, mais je n'ai définitivement pas changé
Traiter WCHAR_T en tant que propriété Build-in Type Code> lorsque j'étais compilé boost.
Pourriez-vous inclure au moins une ligne de votre sortie du compilateur? Peut-être
cl ... code>? Cela me semble que votre
/ zc: wchar_t code> n'a pas pris pour une raison quelconque. Votre sortie du compilateur montrait que.
Cette information est-elle stockée quelque part? Comme la compilation prend quelques heures, je ne voudrais pas recompiler sauf si nécessaire. Quoi qu'il en soit, c'est comme ça que j'ai défini wchar_t:
qmake_cflags = -nologo -zm200 -zc: wchar_t code>. Ceci est le fichier édité:
$ (boost) \ mkspecs \ win32-msvc2010 \ qmake.conf code>. J'avais un coup d'œil à
$ (boost) \. Qmake.cache code> et remarqua que
qmakespec code> pointe vers le même répertoire où j'ai fait le changement.
Pourriez-vous me montrer un exemple comment utiliser
cl code> pour obtenir les informations que vous recherchez?
Désolé, je voulais juste dire lorsque vous compilez le programme qui cause le problème. La fenêtre "Compile Sortie" affiche les commandes utilisées pour compiler le programme. Vous devriez avoir quelque chose comme
CL -C -NOGO -ZM200 -ZC: WCHAR_T -ZI -MDD -GR -EHSC -W3 -W34100 -W34189 -WX ... bla ... bla ... bla >
Merci, tu avais raison. J'ai oublié de mettre / zc: wchar_t dans mon projet. Eh bien, si postez une réponse, vous pouvez avoir la prime;)