2009-02-23 6 views
1

J'essaye de porter une application de Windows basée sur WxWidgets 2.8.9 à MacOS X. Je suis arrivé au point où tout compile avec succès, excepté quelques symboles manquants liés à WxWidgets. J'ai essayé de compiler WxWidgets avec la ligne de commande et avec XCode et j'ai essayé plusieurs options de configuration différentes, mais rien de tout cela n'a fonctionné correctement. Le wiki WxWidgets contient quelques articles sur ce here, mais la plupart des informations sont obsolètes et rien de tout cela n'a résolu mon problème.WxWidgets/GCC/MacOs X: Comment puis-je créer et lier correctement la bibliothèque WxWidgets?

Le plus proche je suis arrivé était en compilant WxWidgets à la ligne de commande avec

./configure --enable-monolithic 
make 

Je lié la bibliothèque en ajoutant « wxMac-2.8.9/lib/libwx_mac-2.8.a » à « Autres Linker Flags "dans mes paramètres de projet XCode.

Mais cela me donne les erreurs suivantes: reliant

"wxOnAssert (char const *, int, char const *, char const *, char const *)", fait référence à partir de: wxStringBase :: wxStringBase (wxStringBase const &) dans MyFrame.o wxCloseEvent :: Veto (bool) dans MyFrame.o wxStringBase :: wxStringBase (wxStringBase const &) dans TGameSettingsForm.o wxCheckBoxBase :: DoSet3StateValue (wxCheckBoxState) dans TGameSettingsForm.o wxCheckBoxBase :: DoGet3StateValue() const dans TGameSettingsForm.o wxStringBase :: wxStringBase (wxStringBase const &) dans NonoGameStates.o wxStringBase :: wxStringBase (wxStringBase const &) dans TWxInvalidRegCodeForm.o

"_iconv_close", référencé à partir de: wxMBConv_iconv :: ~ wxMBConv_iconv() dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: ~ wxMBConv_iconv() dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: ~ wxMBConv_iconv() dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: ~ wxMBConv_iconv() dans libwx_mac-2.8 .a (monolib_strconv.o)

"wxAppConsole :: OnAssert (caractère const *, int, caractère const *, caractère const *)", référencé par: vtable pour CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o

"_iconv", référencé à partir de: wxMBConv_iconv :: GetMBNulLen() const dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: WC2MB (char *, const wchar_t *, non signé longtemps) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: WC2MB (char *, wchar_t const *, long signé) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: MB2WC (wchar_t *, char const *, long non signé) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: MB2WC (wchar_t *, caractère const *, long signé) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv: : wxMBConv_iconv (char const *) dans libwx_mac-2.8.a (monolib_strconv.o)

"wxAppConsole :: OnAssertFailure (char const *, int, char const *, char const *, char const *)", référencé à partir de: vtable pour CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o "_iconv_open", référencé à partir de: wxMBConv_iconv :: wxMBConv_iconv (char const *) dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) dans libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) dans libwx_mac-2.8.a (monolib_strconv.o) ld: symbole (s) non trouvé collect2: ld retourné 1 état sortie

Si possible, je préférerais liaison dynamique, pas de liaison statique comme utilisé ci-dessus. Cependant, pour le moment, je serais heureux de le faire fonctionner du tout. Si quelqu'un pouvait me donner (ou me diriger vers) une description étape par étape sur comment compiler et lier la bibliothèque WxWidgets, je serais très reconnaissant.

Merci,

Adrian

+0

Le guide wxWiki devrait être à jour et fonctionner. Ce que vous pourriez essayer de localiser la racine du problème: Essayez de construire les exemples dans wx 2.8.9, et essayez de construire votre application contre la version wxWidgets fournie par le système. Si les deux fonctionnent vous avez probablement des conflits entre les deux versions dans votre construction. – mghie

Répondre

1

Je n'ai pas CONSTRUIT WX sous Mac OS, mais je ne l'utilise largement sous Windows et Linux. Les instructions de la page que vous avez lié ressemblent beaucoup à ceux sous Linux et il dit:

Après faire, vous trouverez la bibliothèque construite sous votre dossier (par exemple, construire libération ). C'est également là que se trouve le correspondant à wx-config.

Le script WX-config sous Linux fait des projets de construction d'une brise, vous utilisez simplement la commande wx-config --cxxflags pour obtenir les options de compilation nécessaires pour gcc et wx-config --libs pour obtenir toutes les bibliothèques nécessaires pour relier. Sous des environnements de construction tels que Code :: Blocks vous pouvez utiliser ces commandes dans les paramètres du projet, mais je ne suis pas familier avec XCode - mais dans le pire des cas, vous devez simplement copier les options du compilateur et de l'éditeur de liens.

+0

Cela fonctionne après tout, même si je compile wxWidgets en tant que lib dynamique. Pour une raison quelconque, je reçois toujours des symboles manquants, malgré l'utilisation du script wx-config. –

0

wxOnAssert erreurs concernant la PI signifient que vous construisez votre bibliothèque de débogage (__WXDEBUG__ définie, NDEBUG n'est pas) alors que les bibliothèques wxWidgets ont été construites dans la version build (__WXDEBUG__ non défini). La solution est simple: ne faites pas cela.

Si vous devez créer une version de débogage, créez aussi wxWidgets en mode débogage en utilisant l'argument de configuration --enable-debug et utilisez wx-config --debug ... pour obtenir les indicateurs appropriés.

Questions connexes