从wxWidgets和C ++开始

时间:2015-11-07 21:32:21

标签: c++ macos wxwidgets

我试图了解wxWidgets实际上是如何工作的。我想在OSX 10.11.1上构建一个C ++ GUI应用程序,只是为了学习C ++。

现在我从https://www.wxwidgets.org/downloads/获得了wxWidgets,我获得了Linux / OSX版本。

我提取了源代码并运行./configure && make && make install,就像我从这里的一个问题中看到的那样。

似乎已经持续了一段时间然后我得到了这个:

`In file included from ./include/wx/variant.h:401:
./include/wx/any.h:611:5: warning: expression with side effects will be evaluated despite being used as an operand to 'typeid' [-Wpotentially-evaluated-expression]
    WX_DECLARE_ANY_VALUE_TYPE(wxAnyValueTypeImplVariantData)
    ^
./include/wx/any.h:167:25: note: expanded from macro 'WX_DECLARE_ANY_VALUE_TYPE'
        return wxTypeId(*sm_instance.get()) == wxTypeId(*otherType); \
                        ^
./include/wx/typeinfo.h:84:47: note: expanded from macro 'wxTypeId'
#define wxTypeId(OBJ) wxTypeIdentifier(typeid(OBJ).name())
                                              ^
./src/osx/webview_webkit.mm:381:37: warning: incompatible pointer types sending 'WebViewLoadDelegate *' to parameter of type 'id<WebFrameLoadDelegate>' [-Wincompatible-pointer-types]
    [m_webView setFrameLoadDelegate:loadDelegate];
                                    ^~~~~~~~~~~~
./src/osx/webview_webkit.mm:387:34: warning: incompatible pointer types sending 'WebViewPolicyDelegate *' to parameter of type 'id<WebPolicyDelegate>' [-Wincompatible-pointer-types]
    [m_webView setPolicyDelegate:policyDelegate];
                                 ^~~~~~~~~~~~~~
./src/osx/webview_webkit.mm:392:30: warning: incompatible pointer types sending 'WebViewUIDelegate *' to parameter of type 'id<WKUIDelegate> _Nullable' [-Wincompatible-pointer-types]
    [m_webView setUIDelegate:uiDelegate];
                             ^~~~~~~~~~
./src/osx/webview_webkit.mm:464:34: warning: 'WKPreferences' may not respond to 'setUsesPageCache:'
        [[m_webView preferences] setUsesPageCache:NO];
         ~~~~~~~~~~~~~~~~~~~~~~~ ^
./src/osx/webview_webkit.mm:466:34: warning: 'WKPreferences' may not respond to 'setUsesPageCache:'
        [[m_webView preferences] setUsesPageCache:YES];
         ~~~~~~~~~~~~~~~~~~~~~~~ ^
./src/osx/webview_webkit.mm:936:25: error: cannot initialize a variable of type 'WebBackForwardList *' with an rvalue of type 'WKBackForwardList *'
    WebBackForwardList* history = [m_webView backForwardList];
                        ^         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
./src/osx/webview_webkit.mm:954:25: error: cannot initialize a variable of type 'WebBackForwardList *' with an rvalue of type 'WKBackForwardList *'
    WebBackForwardList* history = [m_webView backForwardList];
                        ^         ~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 warnings and 2 errors generated.
make: *** [webviewdll_osx_webview_webkit.o] Error 1`

它失败了。

我不知道如何解决它。

我可以使用更简单的替代方案吗?

另外一个我似乎没有得到的问题:

1 - 它说它是跨平台的。我想当时会说有一个源文件夹会在每个平台上进行不同的编译,而且每个平台都没有源代码。

2 - 此外,它安装在哪里?它会成为我的OS库的一部分,我可以在我编写的任何c ++程序中使用它吗?

3 - 如何将我的程序移动到另一台OSX机器?我是否必须构建一个自包含的应用程序(如Java)或该机器是否需要与我的机器开发程序具有相同的wxWidgets版本?

1 个答案:

答案 0 :(得分:1)

那里有很多问题,分别问每个问题可能会更好,但让我试着简单地解决所有问题。

您看到的问题是由于自上次发布wxWidgets以来OS X SDK中发生了不兼容的更改,您可能已经发现是否搜索了wxTrac并找到了this bug。你也可以看到它,它已经修复了很长一段时间,所以你需要做的就是从GitHub获得最新版本。或者,您可以使用较旧的SDK进行构建,但不建议这样做。

下一步:

  1. 它是跨平台的,因为可以编写单个版本的代码,可以编译并在多个平台上运行。显然不可能完全避免特定于平台的代码,wxWidgets只是为你封装它,所以你不必编写它。
  2. 默认情况下,它安装在/usr/local下作为任何Unix库,但在运行configure时可以使用--prefix选项进行更改。
  3. 您应该在程序中包含wxWidgets库。最简单的方法是静态链接它们。稍微涉及的是将共享库放在应用程序包中。