Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

Probleme beim kompilieren unter Linux (make und g++) EDIT

Yves3 / 1 Antworten / Flachansicht Nickles

Hallo

Ich habe Probleme beim Kompilieren eines kleinen Programms.

Die Ausgabe von make:

make -k
g++ -O3 -c -o ch2_app.o ch2_app.cpp
g++ -O3 -c -o ch2_app_x.o ch2_app_x.cpp
g++ -c ch2_appfactory.h
g++ -O3 -c -o ch2_appfactory_x.o ch2_appfactory_x.cpp
g++ -O3 -c -o ch2_factorymanager.o ch2_factorymanager.cpp
g++ ch2_hello.cpp ch2_app.o ch2_app_x.o ch2_appfactory.o ch2_appfactory_x.o ch2_factorymanager.o -o hello_oo
g++: ch2_appfactory.o: No such file or directory
make: *** [hello_oo] Fehler 1

Und hier mein Makefile:
LD = g++
LDFLAGS = -L/usr/X11R6/lib -lX11 -lXt -lm
CPPFLAGS = -O3

hello_oo: ch2_hello.cpp ch2_app.o ch2_app_x.o ch2_appfactory.o ch2_appfactory_x.o \
ch2_factorymanager.o
$(LD)$(LDFALGS) $^ -o $@
ch2_appfactory.o: ch2_appfactory.h
$(LD) -c ch2_appfactory.h


ch2_appfactory.h beinhaltet eine Klasse, die inline impelmentiert ist, deshalb funktionieren hier die impliziten Regeln von Make nicht und ich muss das Compilieren selber noch definieren. Genau dort liegt wohl der Haken, es wird nämlich nicht eine Datei "ch2_appfactory.o", sonder eine mit dem Namen "ch2_appfactory.h.gch" erstellt.
Wenn ich im Makefile mit der Option -o explizit den Namen "ch2_appfactory.o" angebe, dann habe ich zwar eine .o Datei, die scheint aber nur diese Dateiendung zu haben....

Folgende Fehlermeldung gibt Make in diesem Fall aus
ch2_appfactory.o: file not recognized: File format not recognised

Was ist das also für eine .gch Datei und warum wird keine Objektdatei erstellt?

Vielen Dank im Voraus!

EDIT:


Scheinbar muss die Headerdatei nicht extra kompiliert werden, jetzt habe ich aber Probleme mit den Libraries.

Mein aktuelles Makefile:
LD = g++
LDFLAGS = -L/usr/lib -lX11 -lXt -lm
CPPFLAGS = -O3

hello_oo: ch2_hello.o ch2_app.o ch2_app_x.o ch2_appfactory_x.o \
ch2_factorymanager.o
$(LD)$(LDFALGS) $^ -o $@

Die Ausgabe:

make -k
g++ ch2_hello.o ch2_app.o ch2_app_x.o ch2_appfactory_x.o ch2_factorymanager.o -o hello_oo
ch2_app_x.o: In function `ch2_app_x::create_window()':ch2_app_x.cpp:(.text+0x12): undefined reference to `XOpenDisplay'
:ch2_app_x.cpp:(.text+0x8f): undefined reference to `XCreateWindow'
:ch2_app_x.cpp:(.text+0xa1): undefined reference to `XMapWindow'
ch2_app_x.o: In function `ch2_app_x::ask_to_be_notified_of_interesting_events()':ch2_app_x.cpp:(.text+0xcb): undefined reference to `XSelectInput'
ch2_app_x.o: In function `ch2_app_x::event_loop()':ch2_app_x.cpp:(.text+0x101): undefined reference to `XCheckWindowEvent'
:ch2_app_x.cpp:(.text+0x127): undefined reference to `XLookupString'
:ch2_app_x.cpp:(.text+0x145): undefined reference to `XCheckWindowEvent'
collect2: ld gab 1 als Ende-Status zurück
make: *** [hello_oo] Fehler 1


Die libs liegen alle im Verzeichnis /usr/lib, sie werden aber so wie es aussieht nicht gefunden?!?
bei Antwort benachrichtigen