【问题标题】:How to correctly 'install' wxWidgets on a Mac如何在 Mac 上正确“安装”wxWidgets
【发布时间】:2021-03-20 22:20:18
【问题描述】:

我一直在尝试让 wxWidgets 库在我的 Mac 上运行,但我遇到了很多问题。我已经尝试下载源代码并自己构建它并使用 Homebrew。

我已经到了可以编译以下内容的地步:

helloworld.hpp:

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

class HelloWorldApp : public wxApp {
public:
    virtual bool OnInit();
};

DECLARE_APP(HelloWorldApp)

helloworld.cpp:

#include "helloworld.hpp"


IMPLEMENT_APP(HelloWorldApp)

bool HelloWorldApp::OnInit() {
    wxFrame *frame = new wxFrame((wxFrame*) NULL, -1, _T("Hello wxWidgets World"));
    frame->CreateStatusBar();
    frame->SetStatusText(_T("Hello World"));
    frame->Show(true);
    SetTopWindow(frame);
    return true;
}

我使用g++ helloworld.cpp `wx-config --cxxflags --libs` -o hello 编译它。这似乎可行,并且 g++ 不会报告任何错误或警告。

但是,一旦我尝试运行它 (./hello),就会遇到很多错误,其中大部分是这样的:

objc[92442]: Class wxNSSomething is implemented in both
/usr/local/Cellar/wxmac/3.0.5.1_1/lib/something.dylib (0x10bd00c50)
and /usr/local/opt/wxmac/lib/something.dylib (0x10b329c50). One of the two
will be used. Which one is undefined.

./src/common/object.cpp(251): assert "classTable->Get(m_className) == NULL" 
failed in Register(): Class "wxSomething" already in RTTI table - 
have you used IMPLEMENT_DYNAMIC_CLASS() multiple times or linked some object file twice)?

...最终以分段错误结束。

在我看来,我同时在两个不同的版本中安装了两个版本(因此“类在 ... 和 ... 中都实现了”)。但是,如果我卸载 Hombrew ,它会消除导致编译失败的东西。

我尝试了互联网上的各种可能的修复方法,但都没有奏效。

我不太确定在这里做什么。以前有没有其他人经历过这种情况?我该怎么做才能解决它?

我的 Mac 是 Intel 并运行 MacOS 11.2.3。

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    @scriptor6,

    摆脱自制软件安装。

    摆脱你编译的那个

    从 wxwidgets.org/downloads 下载该库的最新版本。

    在某处解压。

    这样做

    cd wxwidgets-3.1.4
    mkdir buildOSX
    cd buildOSX
    ../configure --enable-debug
    make
    cd samples/minimal
    make
    open minimal.app
    

    如果您在任何时候遇到错误,请告知我们完整的错误消息,如出现时已剪切'n'粘贴

    HTH。

    【讨论】:

    • 它有效!!!!我无法告诉你我有多开心。我觉得我在配置选项上搞砸了太多。为了让我的原始命令正常工作,我需要做的一件事是将 wx-config 复制到 /usr/local/bin,但之后它可以完美地编译和运行。
    • @scriptor6,您不必在任何地方复制任何内容。事实上——你甚至不必安装 wxWidgets。除非您希望您的用户编译您的软件。但这是不同的故事,可以在完成后处理。当您需要构建自己的应用程序时,您所做的就是:cd &lt;my_source_code&gt; &amp;&amp; g++ *.cpp -o &lt;my_binary&gt; /path/to/wx-config/wx-config --cxxflags --libs。您不必安装它的原因是您可能有多个版本的库,并且您可以同时使用它们。
    • 只要确保在 wx-config 命令周围使用反引号即可。所以你不必运行make install - 你可以使用你编译的地方的库。
    • 我假设这里需要 Xcode 来编译库?
    • @Petri,Xcode 或命令行工具。然而,后者更简单,因为它很简单../configure --enable-debug &amp;&amp; make -jN。此外,Xcode 通常不会使用新文件进行更新。
    猜你喜欢
    • 2017-03-19
    • 2014-04-02
    • 2020-04-20
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多