【问题标题】:wxWidgets 3.1.0 and Mac OS X El Capitan (10.11)wxWidgets 3.1.0 和 Mac OS X El Capitan (10.11)
【发布时间】:2017-04-19 11:24:56
【问题描述】:

在 Mac OS X El Capitan (10.11) 上使用 wxWidgets 3.1.0 是否存在任何已知问题?我能够毫无问题地编译它,并且我的示例应用程序的导入正在解决(没有构建错误),但是在启动时我得到一个即时的分段错误。我正在尝试运行文档中提供的minimal sample。它构建时没有任何错误,但运行时会立即崩溃。

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000001

线程0系统显示的错误:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libstdc++.6.dylib               0x00007fff932ee71a std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) + 26
1   libwx_osx_cocoau_core-3.1.dylib 0x0000000109eee003 wxNonOwnedWindow::Create(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&) + 67
2   libwx_osx_cocoau_core-3.1.dylib 0x0000000109ef2321 wxTopLevelWindowMac::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) + 49
3   WxTestApp                       0x0000000109eb7aec wxFrame::wxFrame(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) + 140 (frame.h:35)
4   WxTestApp                       0x0000000109eb7501 MyFrame::MyFrame(wxString const&) + 129 (main.cpp:145)
5   WxTestApp                       0x0000000109eb744d MyFrame::MyFrame(wxString const&) + 29 (main.cpp:180)
6   WxTestApp                       0x0000000109eb7366 MyApp::OnInit() + 102 (main.cpp:127)
7   libwx_osx_cocoau_core-3.1.dylib 0x0000000109ee962e wxApp::CallOnInit() + 158
8   libwx_baseu-3.1.dylib           0x000000010a5d1bf9 wxEntry(int&, wchar_t**) + 121
9   WxTestApp                       0x0000000109eb7216 main + 38 (main.cpp:108)
10  libdyld.dylib                   0x00007fff998c25ad start + 1

main.cpp 的第 108 行是:

wxIMPLEMENT_APP(MyApp);

这是一个已知问题,还是需要根据文档中提供的最小示例进行调整?我想知道这是否与System Integrity Protection 安全功能有关。

【问题讨论】:

  • 我认为 wxWidgets 不再适用于 Mac,因为 3.02 无法完全建立在 10.11 之上。
  • 不确定这是否与您的问题完全相关,但是当我将 gcc 从 4.8 升级到 5.1 时,我在 Windows 10 上遇到了 wxWidgets 问题。该程序正在正确构建,但在运行时它尤其崩溃带有颜色选择小部件。我已经降级到 4.8,一切正常。
  • @Dan,你说的是位于 wxWidgets/samples/minimal 的最小样本吗? wxWidgets 发行版附带的那个?另外,我想知道您为构建库配置的线路是什么?
  • @Igor 是的,就是那个(我在帖子中链接到它)。我只是使用 ./configure 没有参数
  • 为了澄清,我使用 ./configure 没有参数来构建 wxWidgets 库。我使用 CMake 构建最小示例,并且没有链接器/构建错误(我使用 find_package 拉入 wx)。

标签: c++ macos wxwidgets


【解决方案1】:

wxWidgets 3.1.0 确实可以在 macOS 10.11 上运行,这看起来像是一个构建问题,因为代码在 std::string::assign() 中崩溃是没有任何原因的。

您提到您使用 CMake 构建了最小示例。我不知道你到底是怎么做的,因为我们没有为示例提供 CMakefiles(无论如何),但是在构建目录中使用简单的make -C samples/minimal 构建它肯定可以工作。

顺便说一句,看起来您直接在源目录中构建。这应该仍然有效,但如果你这样做很容易出错(而且不容易找到),所以我强烈建议在单独的构建目录中构建,例如mkdir -p ~/build/wx-3.1.0 &amp;&amp; cd $_ &amp;&amp; ~/src/wx/3.1.0/configure &amp;&amp; make(当然,假设您在此目录中有源代码)。

【讨论】:

  • 我应该澄清一下,我没有使用 CMake 构建 wxWidgets,我只是使用了 ./configure、make、sudo make install。我使用带有 find_package 模块的 CMake 构建了最小示例来查找 wx
  • @Dan,您不必安装这些库 - 只需从构建目录中使用它们。另外,您是否尝试只执行“cd wxWidgets-3.1/buildMac/samples/minimal && make && open minimum.app”。正如 Vadim 所说,强烈建议在单独的目录中构建库。
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
相关资源
最近更新 更多