• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af beer | 09.11.2011 12:16

problemer når der compilers med Makefine

Programmering
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 ind eller opret dig for at tilføje kommentarer

Kommentarer2

# 1

13 år 7 måneder siden

Permalink

Indsendt af Anonym7 den 9. november 2011 kl. 13:43

Permalink

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.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

13 år 7 måneder siden

Permalink

Indsendt af beer den 9. november 2011 kl. 17:15

Permalink

Tak skal du have. Det hjalp.

Tak skal du have. Det hjalp.
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

Gode anmeldelser Zorin OS 17.3 0
Linux App Store Flathub når 3 milliarder downloads 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0

Seneste aktivitet

Mest sikker webbrowser 5
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 1
Firefox 2
Ingen Mint 4
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
"Intet realistisk alternativ" - mig i r*ven 10
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9
Open Source-eksperimentet 1
Microsoft og Google ud af de danske skoler 2
Udfordringer med lydin på Debian 12 1
ExplainingComputers? 2

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !