C++ makefile和gtkmm存在问题
我目前正试图用gtkmm编写一个简单的程序,但在编译时遇到了一些问题。我有几个简单的文件:main.cc,它只包含main函数,test.cc和test.h,它们定义了一个基于类的Gtk::Window,其中有一对按钮,最后是一个简单的makefile 当我尝试编译makefile时出现问题,它返回:C++ makefile和gtkmm存在问题,c++,makefile,gtkmm,C++,Makefile,Gtkmm,我目前正试图用gtkmm编写一个简单的程序,但在编译时遇到了一些问题。我有几个简单的文件:main.cc,它只包含main函数,test.cc和test.h,它们定义了一个基于类的Gtk::Window,其中有一对按钮,最后是一个简单的makefile 当我尝试编译makefile时出现问题,它返回: In file included from main.cc:2: test.h:12: fatal error: gtkmm.h: No such file or directory 如果随后将
In file included from main.cc:2:
test.h:12: fatal error: gtkmm.h: No such file or directory
如果随后将#include
替换为#include
,则返回错误:
In file included from test.h:12,
from main.cc:2:
/usr/include/gtkmm-2.4/gtkmm.h:87: fatal error: glibmm.h: No such file or directory
我搜索解决方案已经有一段时间了,并在网上四处寻找,但对于其他有类似问题的用户来说,这是因为他们的makefile中没有包含“pkg config--cflags--libs gtkmm-2.4”。不幸的是,这不是我问题的根源,因为我一直都有这个问题
最奇怪的是,当我不使用makefile时,它可以工作。如果我从main.cc获取main函数并将其放入test.cc文件中,则键入:
g++ test.cc -o output `pkg-config --cflags --libs gtkmm-2.4`
在控制台中,它工作正常。这只是一个暂时的修复,因为我现在需要有多个类。我不知道这是否是make或gtkmm安装的问题,我尝试过重新安装这两个,但都没有效果。我不知道还能尝试什么
最后,如果有帮助的话,我运行的是Ubuntu 10.10和g++版本4.4.5
谢谢你的帮助
生成文件如下所示:
main: main.o
@echo "Main"
@g++ -g main.cc test.o -o output `pkg-config --cflags --libs gtkmm-2.4`
test.o:
@echo "Test"
@g++ test.cc -o test.o `pkg-config --cflags --libs gtkmm-2.4`
clean:
@clear
@rm -f *.o
此错误:
/usr/include/gtkmm-2.4/gtkmm.h:87: fatal error: glibmm.h: No such file or directory`
建议您必须将glibmm-2.4添加到pkg config搜索:
main: main.o
@echo "Main"
@g++ -g main.cc test.o -o output `pkg-config --cflags --libs gtkmm-2.4 glibmm-2.4`
test.o:
@echo "Test"
@g++ test.cc -o test.o `pkg-config --cflags --libs gtkmm-2.4 glibmm-2.4`
clean:
@clear
@rm -f *.o
我也遇到了同样的问题,我通过在构建(编译和链接)的两个步骤中添加
pkg config gtkmm-3.0--cflags--libs
解决了这个问题。我的生成文件:
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=WatsonGui.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=watsonGui
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@ `pkg-config gtkmm-3.0 --libs`
.cpp.o:
$(CC) $(CFLAGS) $< -o $@ `pkg-config gtkmm-3.0 --cflags`
clean:
rm -rf *.o watsonGui
CC=g++
CFLAGS=-c-墙
LDFLAGS=
来源=WatsonGui.cpp
对象=$(源:.cpp=.o)
可执行文件=watsonGui
全部:$(源)$(可执行)
$(可执行文件):$(对象)
$(CC)$(LDFLAGS)$(OBJECTS)-o$@`pkg config gtkmm-3.0--libs`
.cpp.o:
$(CC)$(CFLAGS)$<-o$@`pkg config gtkmm-3.0--CFLAGS`
清洁:
rm-rf*.o watsonGui
请注意,用于pkg config的引号类型很重要,如果使用“而不是”则无效
注:我是makefiles的新手,所以我不能完全确定我做了什么。如果您能发布makefile的代码或编译器调用的输出,这可能会有所帮助,这样我们就可以看到编译器是如何被精确调用的。第二点是@Grizzly说的,除非您发布makefile的内容,否则我们无法提供帮助。
gtkmm.h
和glibmm.h
位于/usr/include/gtkmm-2.4/
中。您可以运行make-n
查看编译时使用的命令。这将向您展示您的工作命令行与make尝试执行的操作之间的差异。您还可以运行pkg config--cflags--libs gtkmm-2.4
查看输出内容,并验证是否列出了所有正确的include目录。不幸的是,这似乎无法解决问题,它只返回相同的错误。只有当我在头文件中指定gtkmm的路径时,才会出现这个错误,否则它只会返回一个找不到gtkmm的错误,我一直都包含了这个错误。无论如何谢谢你的帮助!嗯,这对我来说很有用。您确定已安装libglibmm和libgtkmm的标头吗sudo apt get install libglibmm-2.4-dev libgtkmm-2.4-dev
之后,在源代码上使用#include
。是的,这两个都说它们是在我使用apt get时安装的。我开始认为pkg config存在一些问题,但我不知道如何开始尝试修复该问题。将-I/usr/include/glibmm-2.4
添加到编译行,并告诉我们下一个错误是什么。但是请确保您正在使用#include
,好吗?