• 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

14 å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

14 å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

Open Source 0
GRUB eller Limine? 0
tst 0
Linux Fanpakke til LUG'er og foreninger 0
KDE Plasma 6.6 skrivebordsmiljø udgivet 0

Seneste aktivitet

Lenovo P16 2
Microsoft har netop officielt bragt Linux kommandoer til Windows 2
Ubuntu Mate 26.04 | Kern 4
Gnome extensions 6
USB problemer 14
Copy fail sårbarhed åbner for Root adgang 5
(U)hyggen breder sig 7
Eksperter frygter konsekvenserne ved kunstig intelligens 2
Linux 3
Frankrig lancerer regeringsplan for skift til Linux desktops 4
Pepsi Challenge 18
Canonical planlægger Kontroversielle GRUB ændringer til Ubuntu 26.10 Secure Boot 1
Ubuntu MATE grundlægger Martin Wimpress træder tilbage efter 12 år 1
OpenShot 3.5 tager et spring fremad inden for ydeevne, AI og videoredigering 4
rsync og filsystem 7
Stor sejr for open source, da Tyskland støtter åbent dokumentformat 2
youtube-tui: Nyd YouTube fra terminalen som en professionel 5
Lukker og slukker 8
BigLinux 6
Det engang så elskede PCLinuxOS er tilbage - og det er stadig en fantastisk Windows erstatning 1

© 2026 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !