2011-06-22 53 views
3

我目前正在嘗試用gtkmm編寫一個簡單的程序,但是當我嘗試編譯它時遇到了問題。我有幾個簡單的文件:main.cc,它只包含主函數,test.cc和test.h,它們定義了一個基於類的Gtk :: Window以及一對按鈕,最後是一個簡單的makefile。問題與makefile和gtkmm

,當我嘗試編譯Makefile中出現問題,則返回:

In file included from main.cc:2: 
test.h:12: fatal error: gtkmm.h: No such file or directory 

如果我再與#include <gtkmm-2.4/gtkmm.h>取代#include <gtkmm.h>它返回的錯誤:

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 
+1

如果您發佈makefile的代碼或編譯器調用的輸出,可能會有幫助,因此我們可以看到編譯器的調用方式。 – Grizzly

+0

第二什麼@Grizzly說,除非你發佈你的makefile的內容,否則我們無法提供幫助。 – Mark

+0

'gtkmm.h'和'glibmm.h'在'/ usr/include/gtkmm-2.4 /'中? – Beta

回答

1

此錯誤:

/usr/include/gtkmm-2.4/gtkmm.h:87: fatal error: glibmm.h: No such file or directory` 

建議您必須添加glibmm-2.4pkg配置搜索:

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 
+0

不幸的是,似乎沒有解決這個問題,它只是返回相同的錯誤。只有當我在頭文件中指定gtkmm的路徑時,纔會出現該錯誤,否則它只會返回一個錯誤,它無法找到gtkmm,這是我一直包含的。無論如何感謝您的幫助! – javadpup

+0

那麼,這對我很有用。你確定你已經安裝了libglibmm和libgtkmm的頭文件嗎? '命令和apt-get安裝libglibmm-2.4-dev的libgtkmm-2.4-dev' – karlphillip

+0

之後,使用'#包括'你的來源。 – karlphillip

2

我有同樣的問題,我已經加入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 [email protected] `pkg-config gtkmm-3.0 --libs` 

.cpp.o: 
    $(CC) $(CFLAGS) $< -o [email protected] `pkg-config gtkmm-3.0 --cflags` 

clean: 
    rm -rf *.o watsonGui 

注意,用於pkg配置引號的類型是很重要的,如果你用「而不是」這是行不通的。

P.S .:我是一個makefiles新手,所以我不完全確定我做了什麼。