Makefile en library bad dependencies?

Ik wil enkele opencv-klassen gebruiken op mijn gtkmm/glade/c ++. Na het opnemen van een opencv-code werkt het prima, maar als ik het opencv aan libs als volgt toevoeg: LIBS = 'pkg-config ... opencv --libs' werkt de applicatie niet meer. In de eerste regel van de main (Gnome :: Gda :: init ();) crasht het met een Segmentation Fault

Makefile

LD = g++
LIBS = `pkg-config gtkmm-2.4 glibmm-2.4 libgdamm-4.0 --libs`
CPPFLAGS = `pkg-config gtkmm-2.4 glibmm-2.4 libgdamm-4.0 --cflags`

OBJS = main.o TreeviewImages.o MainWindow.o FormDialog.o DBUtil.o

all: build

build: $(OBJS)
    $(LD) $(LIBS) $(OBJS) -o cish

main.o: main.cpp
   g++ $(CPPFLAGS) -c main.cpp

MainWindow.o: MainWindow.cpp MainWindow.h DBUtil.h FormDialog.h
    g++ $(CPPFLAGS) -c MainWindow.cpp

TreeviewImages.o: TreeviewImages.cpp TreeviewImages.h
    g++ $(CPPFLAGS) -c TreeviewImages.cpp

FormDialog.o: FormDialog.cpp FormDialog.h DBUtil.h
    g++ $(CPPFLAGS) -c FormDialog.cpp

DBUtil.o: DBUtil.cpp DBUtil.h
    g++ $(CPPFLAGS) -c DBUtil.cpp

clean:
    rm -f cish $(OBJS)

Elke lead/hint/hulp wordt gewaardeerd!

0
Begrijp ik het goed dat make zonder fouten wordt voltooid en dat het resulterende uitvoerbare bestand crasht wanneer het wordt uitgevoerd? Dan zou de eerste plaats waar ik naar een fout zou zoeken niet de makefile zijn, maar de c ++ broncode.
toegevoegd de auteur eriktous, de bron

1 antwoord

Het maakt een groot verschil waar je je bibliotheken plaatst bij het linken.

Als u een library-voorbeeld hebt, met behulp van:

 g++ -lexample myprog2.o

zal de bibliotheekfuncties niet laden als myprog2 ernaar verwijst.

Gebruik in plaats daarvan:

g++ myprog2.o -lexample 

Dat wil zeggen, voeg de $ (LIBS) toe na de verwijzing naar objectbestanden.

2
toegevoegd
Dat wil zeggen, verander de regel na build: in iets als $ (LD) $ (OBJS) $ (LIBS) -o cish
toegevoegd de auteur Basile Starynkevitch, de bron
Overeengekomen, maar fout gaan zou een fout geven tijdens de koppelingsfase, toch?
toegevoegd de auteur eriktous, de bron
Ik deed wat je zei, ik verplaats de $ (LIBS) na $ (OBJS) en gooi nog steeds een Segmentation-fout :(
toegevoegd de auteur wisuzu, de bron