【问题标题】:WxWidgets / GCC / MacOs X: How can I build and link the WxWidgets library properly?WxWidgets / GCC / MacOs X:如何正确构建和链接 WxWidgets 库?
【发布时间】:2010-10-09 08:05:24
【问题描述】:

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

我得到的最接近的方法是在命令行中使用

编译 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*)”,引用自: 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 wxStringBase::wxStringBase(wxStringBase const&) 在 NonoGameStates.o wxStringBase::wxStringBase(wxStringBase const&)in TWxInvalidRegCodeForm.o

“_iconv_close”,引用自: wxMBConv_iconv::~wxMBConv_iconv() in libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::~wxMBConv_iconv() in libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::~wxMBConv_iconv() in libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::~wxMBConv_iconv() in libwx_mac-2.8.a(monolib_strconv.o)

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

“_iconv”,引用自: wxMBConv_iconv::GetMBNulLen() 常量在 libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::WC2MB(char*, wchar_t const*, unsigned long) 约束 libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::WC2MB(char*, wchar_t const*, unsigned long) 约束 libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::MB2WC(wchar_t*, char const*, unsigned long) 约束 libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::MB2WC(wchar_t*, char const*, unsigned long) 约束 libwx_mac-2.8.a(monolib_strconv.o) wxMBConv_iconv::wxMBConv_iconv(char const*) in libwx_mac-2.8.a(monolib_strconv.o)

“wxAppConsole::OnAssertFailure(char const*, int, char const*, char const*, char const*)”,引用自: CMyWxApp3_wxstaticAppin MyWxApp3-wxstaticApp.o 的 vtable “_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 库的工作分步描述,我将非常感激。

谢谢,

阿德里安

【问题讨论】:

  • wxWiki 指南应该是最新的并且可以工作。您可以尝试如何定位问题的根源:尝试在 wx 2.8.9 中构建示例,并尝试针对系统提供的 wxWidgets 版本构建您的应用程序。如果两者都有效,则您的构建中的两个版本之间可能存在冲突。

标签: xcode macos gcc wxwidgets


【解决方案1】:

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

在make之后,你会发现 在您的文件夹下构建库(例如, 构建发布)。这也是 对应的wx-config是。

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

【讨论】:

  • 它确实有效,尽管只有当我将 wxWidgets 编译为动态库时。出于某种原因,尽管使用了 wx-config 脚本,我仍然会丢失符号。
【解决方案2】:

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

如果您需要构建调试版本,也可以在调试模式下构建 wxWidgets,使用 --enable-debug 配置参数并使用 wx-config --debug ... 获取适当的标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 2014-07-18
    • 2014-04-22
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2011-01-23
    • 2015-09-14
    相关资源
    最近更新 更多