problemer når der compilers med Makefine
Jeg har et lille "hallo thread" program:
http://pastebin.com/h5xvJBjt
Jeg kan compile det med gcc/g++ 4.6.2 på debian med brug af:
g++ -std=gnu++0x -pthread trådning.cpp
Når det er compilet på denne måde virker det som det skal.
Når jeg bruger følgende makefile:
http://pastebin.com/U9wLqC2k
compiler den uden warnings/error men når jeg køre den for jeg følgende fejl:
terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
Afbrudt (SIGABRT)
Jeg tror det har noget med thread biblioteket og linking at gøre men er ikke sikker.
Nogle som kan guide mig hen til noget fornuftigt?
- Log in to post comments
Kommentarer2
offhand og uden at teste så
offhand og uden at teste så vil jeg sige de to ting IKKE er ækvivalente.
.cpp.o:
$(CC) $(CFLAGS) -DUNIX -std=gnu++0x -pthread $< -o $@
Det giver ikke megen mening det her.. Du ønsker at kompilere en objekt-fil (går jeg ud fra) og derfor mangler du et flag (-c)
-c instruerer GCC til ikke at samle et færdigt program - dvs. ikke medtage linker-fasen. Når du gør dette skal du samtidigt heller ikke have -pthread med i denne linje (som jeg går ud fra er forkert, i øvrigt, mere om dette senere) fordi dette netop er en instruks til at linke din kode mod et eksternt dynamisk library.
Det vil give mest mening at du lavede følgende ændringer:
kun kompilering, ikke linking
.cpp.o:
$(CC) -c $(CFLAGS) -DUNIX -std=gnu++0x $< -o $@
uændret men bemært $LDFLAGS som jeg går ud fra vi sætter vores linker flag i
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
bemærk at vi smed pthread i variablen der skulle indeholde linker flag
LDFLAGS= -lpthread
Den sidste ting, '-lpthread' versus '-pthread' kan muligvis være forkert. Men i C vil '-lsexy' betyde at linkeren ville lede igennem $LD_LIBRARY_PATH for en fil ved navn 'libsexy.so' (-l er flaget, sexy er argumentet)
Skriv tilbage hvis du har mere. Om ikke andet kan det være andre kan hjælpe dig videre endnu. Men tag og læs kort om kompileringsprocessens forskellige tring så skulle du gerne forstå hvor din første fejl var.
Tak skal du have. Det hjalp.
Tak skal du have. Det hjalp.