WxWidgets / GCC / MacOs X: Как правильно собрать и связать библиотеку WxWidgets? - PullRequest
1 голос
/ 23 февраля 2009

Я пытаюсь портировать приложение Windows, основанное на WxWidgets 2.8.9, на MacOS X. Я дошел до того, что все успешно компилируется, за исключением нескольких отсутствующих символов, связанных с WxWidgets. Я попытался скомпилировать WxWidgets с помощью командной строки и с помощью XCode, и я попробовал несколько различных вариантов конфигурации, но ни один из них не работал должным образом. В WxWidgets Wiki есть несколько статей об этом здесь , но большая часть информации устарела, и ни одна из них не решила мою проблему.

Самое близкое, что я получил, было скомпилировать WxWidgets в командной строке с

./configure --enable-monolithic
make

Затем я связал библиотеку, добавив «wxMac-2.8.9 / lib / libwx_mac-2.8.a» к «Другие флаги компоновщика» в моих настройках проекта XCode.

Но это дает мне следующие ошибки компоновки:

"wxOnAssert (char const *, int, char const *, char const *, char const *)", на который ссылаются из: wxStringBase :: wxStringBase (wxStringBase const &) в MyFrame.o wxCloseEvent :: Veto (bool) в MyFrame.o wxStringBase :: wxStringBase (wxStringBase const &) в TGameSettingsForm.o wxCheckBoxBase :: DoSet3StateValue (wxCheckBoxState) в TGameSettingsForm.o wxCheckBoxBase :: DoGet3StateValue () const в TGameSettingsForm.o wxStringBase :: wxStringBase (wxStringBase const &) в NonoGameStates.o wxStringBase :: wxStringBase (wxStringBase const &) в TWxInvalidRegCodeForm.o

"_ iconv_close", на который ссылаются: wxMBConv_iconv :: ~ wxMBConv_iconv () в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: ~ wxMBConv_iconv () в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: ~ wxMBConv_iconv () в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: ~ wxMBConv_iconv () в libwx_mac-2.8.a (monolib_strconv.o)

"wxAppConsole :: OnAssert (char const *, int, char const *, char const *)", на который ссылаются из: vtable for CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o

"_ iconv", по ссылке с: wxMBConv_iconv :: GetMBNulLen () const в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: WC2MB (char *, wchar_t const *, unsigned long) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: WC2MB (char *, wchar_t const *, unsigned long) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: MB2WC (wchar_t *, char const *, long без знака) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: MB2WC (wchar_t *, char const *, long без знака) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolib_strconv.o)

"wxAppConsole :: OnAssertFailure (char const *, int, char const *, char const *, char const *)", на который ссылаются из: vtable для CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o "_iconv_open", по ссылке с: wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolib_strconv.o) ld: символ (ы) не найден collect2: ld вернул 1 статус выхода

Если возможно, я бы предпочел динамическое связывание, а не статическое связывание, как описано выше. Тем не менее, на данный момент я был бы счастлив запустить его вообще. Если бы кто-нибудь мог дать мне (или указать мне) рабочее пошаговое описание того, как скомпилировать и связать библиотеку WxWidgets, я был бы очень благодарен.

Спасибо

Адриан

Ответы [ 2 ]

1 голос
/ 23 февраля 2009

Я не собирал wx под MacOS, но я широко его использую под Windows и Linux. Инструкции на странице, на которую вы ссылаетесь, очень похожи на инструкции в Linux и гласят:

Следуя марке, вы найдете встроенная библиотека в вашей папке (например, строить-релиз). Это также, где соответствующий wx-config is.

Сценарий wx-config в Linux упрощает сборку проектов, вы просто используете команду wx-config --cxxflags, чтобы получить флаги компиляции, необходимые для gcc, и wx-config --libs, чтобы получить все необходимые библиотеки для компоновки. В средах сборки, таких как Code :: Blocks, вы можете использовать эти команды в настройках проекта, однако я не знаком с XCode - но в худшем случае вам просто нужно скопировать параметры компилятора и компоновщика, которые перечислены в сценарии wx-config.

0 голосов
/ 23 января 2010
Ошибки, связанные с

wxOnAssert, означают, что вы собираете свою библиотеку в режиме отладки (__WXDEBUG__ определено, NDEBUG нет), в то время как библиотеки wxWidgets были встроены в сборку выпуска (__WXDEBUG__ не определено). Решение простое: не делайте этого.

Если вам нужно создать отладочную версию, соберите wxWidgets и в режиме отладки, используя --enable-debug аргумент конфигурации, и используйте wx-config --debug ..., чтобы получить соответствующие флаги.

...