Not logged in. · Lost password · Register

Robert
(Administrator)
Avatar
Member since Nov 2002
559 posts
Subject: Semop() verändert mein SHM. Hilfe!
Bin gerade bei der Aufgabe 8 und halb am verzweifeln.

Mein Verbraucher macht eine OP auf der Semaphore, und danach ist der wert des Lesezeigers im SHM anders. Davor 0, danach 694349243 (oder so  ;-))

Wie kann dass denn bitte sein?
Ummm, yeah. We couldn't run an ad that said no Portuguese, but ummm... no Portuguese!
Mikey
SP Team
Avatar
Member since Nov 2002
641 posts
mehr input bitte
Robert
(Administrator)
Avatar
Member since Nov 2002
559 posts
Okay, ich hab noch so eine blöde Fehlermeldung beim compilieren, vielleicht hängts zusammen (hmm, verdammt, ich glaub das hängt sogar sicher zusammen...)

cc shm.o -o shm
/usr/lib/gcc-lib/i486-suse-linux/3.3/../../../crt1.o(.text.0x18): In function '_start':
: undefined reference to 'main'
collect2: ld returned 1 exit status
make: *** [shm] Fehler 1

Also klappt wohl irgendwas mit dem verlinken oder so nicht.
im makefile kompilier ich erst die sem.c und shm.c mit -c zu objectfiles, und dann den erzeuger&verbraucher zusammen mit den objects zu den ausführbaren Dateien.

Achja, meine Semaphoren haben mit den Zeigern des Ringpuffers nix zu tun, die sind nur zur leer/voll steuerung und zur koordinierung des Zugriffs da...
Ummm, yeah. We couldn't run an ad that said no Portuguese, but ummm... no Portuguese!
Erik
Member since Jan 2003
424 posts
Quote by Robert:
Okay, ich hab noch so eine blöde Fehlermeldung beim compilieren, vielleicht hängts zusammen (hmm, verdammt, ich glaub das hängt sogar sicher zusammen...)

cc shm.o -o shm
/usr/lib/gcc-lib/i486-suse-linux/3.3/../../../crt1.o(.text.0x18): In function '_start':
: undefined reference to 'main'
collect2: ld returned 1 exit status
make: *** [shm] Fehler 1



cc shm.o -o shm

Was soll diese Zeile bewirken?

Du versuchst aus shm.c (wurde ja vorher sicher irgendwann mal zu einem shm.o compiliert) ein ausführbares Programm zu machen.
In der shm.c sind aber nur ein paar Prozeduren drin und es fehlt die main(). Darum sagt der Compiler (eigentlich der Linker), er kann keine Main finden und somit auch kein Programm erstellen. Du erstellst aus der shm.c und der sem.c erstmal nur Obeject Dateien (*.o). Beim compilieren des erzeuger / verbraucher werden die dann mit angegeben:

shm.o: shm.c
    gcc -Wall -pedantic -D_XOPEN_SOURCE -c shm.c

erzeuger: erzeuger.c sem.o shm.o
    gcc -Wall -pedantic -D_XOPEN_SOURCE erzeuger.c sem.o shm.o -o erzeuger
[...]
This post was edited 2 times, last on 2004-01-21, 16:07 by Erik.
snehls
Superfreund aka Der Schwede
Avatar
Member since Oct 2002
750 posts
@ robert: da sieht man mal wieder, wer noch nie ein makefile geschrieben hat *kopfeinzieh*  :-D  :-D  :-D
"I will speculate that today’s single-threaded applications as actually used in the field could actually see a performance boost for most users by going to a dual-core chip, not because the extra core is actually doing anything useful, but because it is running the adware and spyware that infest many users’ systems and are otherwise slowing down the single CPU that user has today."
Robert
(Administrator)
Avatar
Member since Nov 2002
559 posts
.PHONY: all install clean
COMPILE  = gcc -g -ansi -pedantic-errors -D_XOPEN_SOURCE=500 -Wall -Werror
TARGET1  = erzeuger
TARGET2  = verbraucher


all: $(TARGET1) $(TARGET2) shm.o sem.o

sem.o: sem.c
    $(COMPILE) -c -o sem.o sem.c

shm.o: shm.c
    $(COMPILE) -c -o sem.o shm.c

erzeuger: $(TARGET1).c shm.o sem.o
    $(COMPILE) -o $(TARGET1) shm.o sem.o $(TARGET1).c

verbraucher: $(TARGET2).c shm.o sem.o
    $(COMPILE) -o $(TARGET2) shm.o sem.o $(TARGET2).c

Also wieso klappt diese Makefile nicht?
Ummm, yeah. We couldn't run an ad that said no Portuguese, but ummm... no Portuguese!
This post was edited on 2004-01-21, 17:16 by Robert.
snehls
Superfreund aka Der Schwede
Avatar
Member since Oct 2002
750 posts
Quote by Robert:

sem.o: sem.c
    $(COMPILE) -c -o sem.o sem.c

shm.o: shm.c
    $(COMPILE) -c -o sem.o shm.c

Also wieso klappt diese Makefile nicht?
wieso denn -c -o, ich würde da nur -c machen, das erstellt dir doch dein objekt-file und mehr willst du ja nicht!
also quasi ....
$(COMPILE) -c shm.c
"I will speculate that today’s single-threaded applications as actually used in the field could actually see a performance boost for most users by going to a dual-core chip, not because the extra core is actually doing anything useful, but because it is running the adware and spyware that infest many users’ systems and are otherwise slowing down the single CPU that user has today."
This post was edited on 2004-01-21, 17:22 by snehls.
MeistaJo
Member since Nov 2002
42 posts
In reply to post #6
sem.o: sem.c
    $(COMPILE) -c -o sem.o sem.c

shm.o: shm.c
    $(COMPILE) -c -o sem.o shm.c  


In der letzten Zeile wär shm.o wohl besser als sem.o
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen