• 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 11 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 11 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

BigLinux 0
Amerikansk tastatur på dansk tastatur 0
FSF giver flere detaljer om sit nye Librephone projekt 0
Det eneste, der forhindrer dig i at skifte til Linux, er din tankegang 0
OpenZL. Et nyt open source-datakomprimeringsframework 0

Seneste aktivitet

Brug carburetor til at forblive usynlig online 8
Sådan konfigurerer du flatpaks' flathub til verified only 9
Plasma tapet-skifter 3
How to upgrade to LMDE 7 4
Virksomheder og enheder der kører på Linux 11
NordVPN har udgivet kildekoden til sin grafiske brugergrænseflade 2
Flere og flere bruger Brave browseren 1
LibreOffice og Collabora: Hvorfor er de ikke i skolerne i stedet for Word og Google Docs? 11
Firewall igen 5
Værdien ved open source 2
Sailfish på android telefon 1
Ladybird Browser 7
Satiriske ordspil 3
Kan ikke boote på installation 26
Tilføj signatur til Evolution mail 2
LUKS kryptering - Er der andre der bruger det 15
Dansk distro til software udviklere 2
Linux Debian 5
Brother printer installation 2
Den er go 6

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !