Makefile gtkmm; collect2.exe:错误:ld返回1退出状态

时间:2017-01-10 22:17:44

标签: c++ makefile linker mingw gtkmm

我很确定问题出现在我的makefile中,就像我编写程序时一样,标题中的错误指向第12行,即链接器命令。我有一段时间不知所措,但似乎没有任何工作要做。以下是我的代码/ makefile。我是在mingw32做的。

生成文件:

CXXFLAGS := -std=c++11 -Wall -Werror -g $(shell pkg-config gtkmm-3.0 --cflags)
LDLIBS = -lpthread $(shell pkg-config gtkmm-3.0 --libs)

all: test

test: sample.count

sample.count: InIT_Printer_Install_Assistant
    ./InIT_Printer_Install_Assistant

InIT_Printer_Install_Assistant: main.o win_home.o
    g++ $(CXXFLAGS) $(LDLIBS) -o $@ $^ `pkg-config gtkmm-3.0 --cflags --libs`

main.o: main.cpp win_home.h
win_home.o: win_home.cpp win_home.h

clean:
    -rm -f *.o *~

spotless: clean
    -rm -f InIT_Printer_Install_Assistant

main.cpp中:

#include <gtkmm.h>
#include <iostream>
#include "win_home.h"

int main(int argc, char *argv[])
{
    auto app = Gtk::Application::create(argc, argv, "com.InIT.PrinterApp");

    HomeGUI win_home;

    win_home.set_default_size(600,400);
    win_home.set_title("InIT Self-Service Printer Management");

    return app->run(win_home);
}

win_home.cpp:

#include "win_home.h"

HomeGUI::HomeGUI()
{
    //build interface/gui
    this->buildInterface();


    //retrieve printers

    //create printer Buttons

    //register Handlers
    //this->registerHandlers();
}

void HomeGUI::buildInterface()
{
    //combo boxes
    /*
    Gtk::HBox combo_rowbox = Gtk::HBox(false, 10);
    Gtk::ComboBox combobox_department = Gtk::ComboBox(false);
    Gtk::ComboBox combobox_building = Gtk::ComboBox(false);
    combo_rowbox.pack_start(child, false, false, padding=0)
    add(combo_rowbox);
    */
    return;
}

win_home.h:

#ifndef GTKMM_INIT_PRINTER_INSTALL_ASSISTANT_H
#define GTKMM_INIT_PRINTER_INSTALL_ASSISTANT_H

#include <vector>
#include <string>
#include <iostream>
#include <gtkmm.h>

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

    void buildInterface();
    void registerHandlers();
    //void defaultToFloorPlan();
protected:
    //Signal Handlers

    //Member variables
    std::string m_selected_department;
    std::string m_selected_building;
    std::string m_selected_floor;

    //Member widgets
    //std::vector<Gtk::Button> m_printbuttons;
    //HelpGUI m_win_help;
    //UninstallGUI m_win_uninstall;

    //Member logic
    //ClientLogic logic;
};

#endif

制作后的结果:

C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:对{Home}的VTT for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to VTT的未定义引用&#39; C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:对HomeGUI的vtable for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to vtable的未定义引用&#39; C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:对HomeGUI的vtable for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to vtable的未定义引用&#39; C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:未定义引用`VTT for HomeGUI&#39; collect2.exe:错误:ld返回1退出状态 make:*** [Makefile:12:InIT_Printer_Install_Assistant]错误1

如果有人能够告诉我为什么会这样,那将非常感激。

**注意:正如您所知,我仍然是一个带有makefile的菜鸟,所以当涉及到一般的makefile格式时,请随意根据需要纠正我。

1 个答案:

答案 0 :(得分:0)

@ Unimportant的评论解决了这个问题。纯虚拟和非纯虚函数都必须都有一个主体。将我的win_home.h更改为:

#include "win_home.h"

HomeGUI::HomeGUI()
{
    //build interface/gui
    this->buildInterface();


    //retrieve printers

    //create printer Buttons

    //register Handlers
    //this->registerHandlers();
}
HomeGUI::~HomeGUI()
{

}

void HomeGUI::buildInterface()
{
    //combo boxes
    /*
    Gtk::HBox combo_rowbox = Gtk::HBox(false, 10);
    Gtk::ComboBox combobox_department = Gtk::ComboBox(false);
    Gtk::ComboBox combobox_building = Gtk::ComboBox(false);
    combo_rowbox.pack_start(child, false, false, padding=0)
    add(combo_rowbox);
    */
    return;
}

void HomeGUI::registerHandlers()
{

}
相关问题