WxWidgets / GCC / MacOs X:如何正确构建和链接WxWidgets库?

时间:2009-02-23 14:53:46

标签: xcode macos gcc wxwidgets

我正在尝试将基于WxWidgets 2.8.9的Windows应用程序移植到MacOS X.我已经达到了一切成功编译的程度,除了一些与WxWidgets相关的缺失符号。我已经尝试使用命令行和XCode编译WxWidgets,我尝试了几种不同的配置选项,但这些都没有正常工作。 WxWidgets Wiki有一些关于这个here的文章,但大部分信息已经过时,但没有一个能解决我的问题。

我最接近的是使用

在命令行编译WxWidgets
./configure --enable-monolithic
make

然后我通过在我的XCode项目设置中将“wxMac-2.8.9 / lib / libwx_mac-2.8.a”添加到“Other Linker Flags”来链接库。

但是这给了我以下链接错误:

“wxOnAssert(char const *,int,char const *,char const *,char const *)”,引自:       MyFrame.o中的wxStringBase :: wxStringBase(wxStringBase const&)       MyFrame.o中的wxCloseEvent :: Veto(bool)       TGameSettingsForm.o中的wxStringBase :: wxStringBase(wxStringBase const&)       TGameSettingsForm.o中的wxCheckBoxBase :: DoSet3StateValue(wxCheckBoxState)       在TGameSettingsForm.o中的wxCheckBoxBase :: DoGet3StateValue()const       NonoGameStates.o中的wxStringBase :: wxStringBase(wxStringBase const&)       TWxInvalidRegCodeForm.o中的wxStringBase :: wxStringBase(wxStringBase const&)

“_ iconv_close”,引自:       libwx_mac-2.8.a中的wxMBConv_iconv ::〜wxMBConv_iconv()(monolib_strconv.o)       libwx_mac-2.8.a中的wxMBConv_iconv ::〜wxMBConv_iconv()(monolib_strconv.o)       libwx_mac-2.8.a中的wxMBConv_iconv ::〜wxMBConv_iconv()(monolib_strconv.o)       libwx_mac-2.8.a(monolib_strconv.o)中的wxMBConv_iconv ::〜wxMBConv_iconv()

“wxAppConsole :: OnAssert(char const *,int,char const *,char const *)”,引自:       适用于CMyWxApp3_wxstaticAppin的vtable MyWxApp3-wxstaticApp.o

“_ iconv”,引自:       wxMBConv_iconv :: libwx_mac-2.8.a中的GetMBNulLen()const(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 *,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.a(monolib_strconv.o)       libwx_mac-2.8.a中的wxMBConv_iconv :: wxMBConv_iconv(char const *)(monolib_strconv.o)

“wxAppConsole :: OnAssertFailure(char const *,int,char const *,char const *,char const *)”,引自:       适用于CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o的vtable   “_iconv_open”,引自:       libwx_mac-2.8.a中的wxMBConv_iconv :: wxMBConv_iconv(char const *)(monolib_strconv.o)       libwx_mac-2.8.a中的wxMBConv_iconv :: wxMBConv_iconv(char const *)(monolib_strconv.o)       libwx_mac-2.8.a中的wxMBConv_iconv :: wxMBConv_iconv(char const *)(monolib_strconv.o)       libwx_mac-2.8.a中的wxMBConv_iconv :: wxMBConv_iconv(char const *)(monolib_strconv.o) ld:找不到符号 collect2:ld返回1退出状态

如果可能的话,我更喜欢动态链接,而不是上面使用的静态链接。但是,目前我很乐意让它运行起来。如果有人能给我(或指向我)关于如何编译和链接WxWidgets库的逐步说明,我将非常感激。

谢谢,

阿德里安

2 个答案:

答案 0 :(得分:1)

我没有在MacOS下构建wx,但我在Windows和Linux下广泛使用它。您链接的页面上的说明与Linux下的说明非常相似,它说:

  

按照制作,你会发现   在您的文件夹下构建库(例如,   建释放)。这也是   对应的wx-config是。

Linux下的wx-config脚本使构建项目变得轻而易举,只需使用命令wx-config --cxxflags获取gcc和wx-config --libs所需的编译标记即可获得所有必需的链接库。在Code :: Blocks等构建环境下,您可以在项目设置中使用这些命令,但是我不熟悉XCode - 但最糟糕的情况是您只需要复制wx-config脚本列出的编译器和链接器选项。

答案 1 :(得分:0)

wxOnAssert - 相关错误意味着您在调试中构建了库(__WXDEBUG__已定义,NDEBUG不是),而wxWidgets库是在发布版本中构建的(__WXDEBUG__没有定义)。解决方案很简单:不要这样做。

如果您需要构建调试版本,请使用--enable-debug configure参数在调试模式下构建wxWidgets,并使用wx-config --debug ...获取相应的标记。