2011-01-05 6 views
14

OS: Fedora 14Probleme beim Kompilieren gtkmm

Compiler: g ++ (GCC) 4.5.1 20.100.924 (Red Hat 4.5.1-4)

I gtkmm24-devel aus dem Repository über yum installiert. Um sicherzustellen, dass die Installation wie geplant durchgeführt wurde, habe ich beschlossen, eines der Beispiele auf der Seite auszuprobieren.

#include <gtkmm.h> 

int main(int argc, char *argv[]) { 
    Gtk::Main kit(argc, argv); 
    Gtk::Window window; 
    Gtk::Main::run(window); 
    return 0; 
} 

Ich lief das Beispiel, und, hey! Es sagte, dass es gtkmm.h nicht finden konnte, kein Problem, ich habe nur vergessen, die Bibliothek zu verlinken. Ich habe /usr/include/gtkmm-2.4 zu meiner Bibliothekssuche durch Eclipse hinzugefügt. Kein bueno, g ++ kann es immer noch nicht finden!

fatal error: gtkmm.h: No such file or directory 

Ich versuche dann gtkmm aufzunehmen durch #include <gtkmm-2.4/gtkmm.h> verwenden und neu kompilieren, ein anderer Fehler! :(

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

Danke fürs Lesen

+1

, das kein "Verknüpfung" Fehler ist. Das ist ein "Compiler" -Fehler. Es gibt einen großen Unterschied. – chrisaycock

+0

Es tut mir leid, ich bin immer noch ein Neuling, wenn es um Systemprogrammierung geht. Ich werde meinen Compiler und Version hinzufügen. – t3hb4tman

Antwort

22

Kurze Antwort

Verwenden Sie die Ausgabe von 'pkg-config gtkmm-2.4 --cflags' für Include-Pfade und 'pkg-config gtkmm-2.4 --libs' für Bibliotheken zu verknüpfen.

Lange Antwort

Er sagte, es nicht gtkmm.h, kein Problem finden kann, habe ich vergessen, nur die Bibliothek zu verknüpfen.

Das Erstellen eines C/C++ - Programms erfolgt in zwei separaten Schritten. Zuerst werden die Quelldateien kompiliert und Objektdateien ausgegeben; und dann sind die Objektdateien miteinander verknüpft. Der Fehler, den Sie bekommen, kommt vom Kompilierungsschritt.

Unter Linux enthalten die meisten Bibliotheken pkgconfig-Dateien, um anderen Programmen die Verwendung der Bibliotheken zu erleichtern. gtkmm kommt auch mit eigenen pkgconfig-Dateien.

Sie versuchen, /usr/include/gtkmm-2.4 für Include-Pfad manuell anzugeben; das ist falsch. Verwenden Sie stattdessen die Ausgabe von pkgconfig, um herauszufinden, wo sich die Header-Dateien befinden.Um alle Verzeichnisse für gtkmm erforderlich sind, verwenden Sie den folgenden Befehl ein:

pkg-config gtkmm-2.4 --cflags 

Zur Verknüpfung Verwenden Sie den folgenden pkgconfig Befehl, um die Bibliotheken, die Sie brauchen verknüpfen mit:

pkg-config gtkmm-2.4 --libs 

Sie können testen, es auf der Kommandozeile durch direkten Aufruf von g ++.

g++ myfirstprogram.cpp -o myfirstprogram `pkg-config gtkmm-2.4 --cflags --libs` 

Weitere Informationen finden Sie in den gtkmm docs: http://library.gnome.org/devel/gtkmm-tutorial/unstable/sec-basics-simple-example.html.en

+1

Hallo kavel.Ich fand Ihre Antwort sehr hilfreich, um mir zu helfen, mein Projekt zu kompilieren, aber ich bin immer noch Probleme mit der Verknüpfung haben. Wären Sie bereit, mir bei meiner Frage hier zu helfen (http://stackoverflow.com/questions/8586006/linking-gtkmm-libraries-in-visual-studio)? Danke vielmals! – wrongusername

0

Diese Schritte in der Regel helfen, dieses Problem zu lösen.

  • Ihren Computer für glibmm.h Suche
    • Wenn gefunden - fügen seine Verzeichnis der Pfadliste einschließen
    • Wenn nicht gefunden - Google for glibmm.h und finden Sie heraus, in welcher Bibliothek es enthalten ist. Sie finden es in In diesem Fall ist es (Überraschung!) glibmm. Installieren Sie es mit Ihrem Paketmanager.

Das Problem, wie in den Kommentaren erwähnt, ist ein Compiler-Fehler und der Compiler streitet über eine fehlende (Header-Datei). Die oben beschriebenen Schritte finden entweder den Speicherort der fehlenden Datei oder helfen Ihnen bei der Installation einer Bibliothek, zu der die Header-Datei gehört.

+0

Ich habe bereits die Bibliothek installiert und ihren Pfad (/ usr/lib) eingeschlossen, aber der Fehler bleibt bestehen. :( Es scheint, dass die Installation dieser Bibliotheken gibt mir nur die gemeinsamen Objekte (.so). Ich hatte das gleiche Problem mit Boost und nach einiger Zeit nicht in der Lage, es herauszufinden, kompilieren es aus der Quelle (die gab mir dann die richtigen Header, die ich brauchte), ich hatte gehofft, das zu vermeiden und einen Überblick darüber zu bekommen, was genau ich falsch mache, aber wenn es notwendig ist, werde ich es tun. – t3hb4tman

+0

Beachten Sie, dass Sie die Entwicklungsversionen von installieren müssen die Bibliotheken, um Header-Dateien zu erhalten.Diese sind in der Regel mit einem -dev-Erweiterung in ihren Paketnamen markiert .. –

+0

Paket glibmm24-devel-2.24.2-1.fc14.1.i686 bereits installiert und neueste Version – t3hb4tman