WxWidgets / GCC / MacOs X: Как правильно собрать и связать библиотеку WxWidgets?

Я пытаюсь перенести приложение 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 () константа в TGameSettingsFormates () 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 (monolibo_iconv_iconv) () в libwx_mac-2.8.a (monolibo_conv) в 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 для 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 (monolibo. ) 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 *, unsigned long) constin libwx_mac-2.8_str (monolib_strconv.o) .o) wxMBConv_iconv :: MB2WC (wchar_t *, char const *, unsigned long) constin libwx_mac-2.8.a (monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolibo_

"wxAppConsole :: OnAssertFailure (char const *, int, char const *, char const *, char const *)", ссылка на который указана из: vtable для CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o "_iconv_open", ссылка на: wxMBConv_iconv :: wxvMBConv 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 * monolib_strconv.o) wxMBConv_iconv :: wxMBConv_iconv (char const *) в libwx_mac-2.8.a (monolib_strconv.o) ld: symbol (s) not found collect2: ld вернул 1 статус выхода

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

Спасибо,

Адриан

Ответов (2)

Решение

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

После make вы найдете встроенную библиотеку в своей папке (например, build-release). Здесь же находится соответствующий wx-config.

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

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

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