我正在尝试将基于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库的逐步说明,我将非常感激。
谢谢,
阿德里安
答案 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 ...
获取相应的标记。