微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我尝试编译我的程序时,GTKmm 头文件似乎丢失了

如何解决当我尝试编译我的程序时,GTKmm 头文件似乎丢失了

我正在尝试使用 g++ (clang) 编译 GTKmm C++ 程序,但是我似乎找不到我需要的头文件。我已经运行了 GTK+ 的安装 .sh 文件,我也尝试通过 Homebrew 直接安装 GTKmm,但我仍然收到此错误

Fatal error: 'gtkmm/button.h' file not found

我认为这就像添加一个包含目录一样简单,但我已经尝试在我的硬盘驱动器中搜索与 GTK 相关的内容,但仍然没有找到任何东西。我该怎么办?

我使用的是运行 MacOS Big Sur 的 Macbook。

更新: 我的代码是这样的:

helloworld.h

#ifndef GTKMM_EXAMPLE_HELLOWORLD_H
#define GTKMM_EXAMPLE_HELLOWORLD_H

#include <gtkmm/button.h>
#include <gtkmm/window.h>

class HelloWorld : public Gtk::Window {
    public:
        HelloWorld();
        virtual ~HelloWorld();

    protected:
        //Signal handlers:
        void on_button_clicked();

        //Member widgets:
        Gtk::Button m_button;
};

#endif

helloworld.cpp

#include "helloworld.h"
#include <iostream>

HelloWorld::HelloWorld()
: m_button("Hello World")   // creates a new button with label "Hello World".
{
    // Sets the border width of the window.
    set_border_width(10);

    // When the button receives the "clicked" signal,it will call the
    // on_button_clicked() method defined below.
    m_button.signal_clicked().connect(sigc::mem_fun(*this,&HelloWorld::on_button_clicked));

    // This packs the button into the Window (a container).
    add(m_button);

    // The final step is to display this newly created widget...
    m_button.show();
}

HelloWorld::~HelloWorld()
{
}

void HelloWorld::on_button_clicked()
{
    std::cout << "Hello World" << std::endl;
}

main.cpp

#include "helloworld.h"
#include <gtkmm/application.h>

int main (int argc,char *argv[]) {
    auto app = Gtk::Application::create(argc,argv,"org.gtkmm.example");

    HelloWorld helloworld;

    //Shows the window and returns when it is closed.
    return app->run(helloworld);
}

代码来自here

我首先导航到上面列出的文件的目录并运行 g++ main.cpp -o helloworld 进行编译。

因为我已经安装了 Homebrew,所以 g++ 使用了 clang++。

解决方法

好的,我想通了。

我需要通过 Homebrew 安装 GTK+ 和 GTKmm。这将库放入 /usr/local/include。请注意,问题代码仍然不起作用,因为它使用了错误的目录(我安装了 gtk+3 和 gtkmm3)。有关详细信息,请参阅 this 答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。