PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : myasuro.h ohne Wirkung



knarf12
08.06.2007, 16:51
Es handelt es sich bei mir wahrscheinlich um ein typisches Anfängerproblem, insbesondere C betreffend.
Ich habe versucht mit #include "myasuro.h" ein paar Werte zu verändern, die z.B. für Turn() den Drehwinkel beeinflussen. Aber keine Chance, egal wo ich die myasuro.h auch hinkopiere bzw. wie ich #include schreibe. Es ändert überhaupt nichts.
Wo muss die Datei denn stehen, damit sie mit compiliert wird.
Ich habe unter SuSE 10.0 den gcc-avr unter /opt/cross installiert und diesen Pfad auch im Makefile angegeben. Aber auch eine direkte Adressierung #include "/home/frank/.../myasuro.h" hilft überhaupt nichts.
Was mache ich falsch? Hoffe genug Informationen gegeben zu haben.

Sternthaler
08.06.2007, 19:34
Hallo knarf12,
erst einmal herzlich willkommen im Forum.

Du hast ja schon alles mögliche probiert und auch schon den richtigen Weg eingeschlagen.
Jetzt bleibt eigendlich nur noch die Frage, ob diese Konstanten aus myasuro.h auch benutzt werden!!
Du solltest auf alle Fälle mal in die Funktionen Go() und Turn() 'reinsehen', ob sie dort als Teiler/Multiplikator tatsächlich eingetragen sind. (Im Source encoder.c)
Ab asuro_libv270rc3.zip werden sie erst benutzt. Sonst müstest du sie dir die RC3 erst einmal noch holen.
Z.B. Über diese LIB-Beschreibung (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26594)

m.a.r.v.i.n
08.06.2007, 20:40
Hallo knarf12,

du mußt natürlich auch die AsuroLib neu übersetzen, damit sich Änderungen an der myasuro.h auch auswirken. Und diese aktualisierte Lib muß dann ins AVR Lib Verzeichnis kopiert werden.

Masterarthur
09.06.2007, 10:34
Wie übersetzt man denn die ASUROLIB neu? Habe die Frage schon gesondert gestellt, blieb aber leider unbeantwortet. Bin Dankbar für jeden Hinweis.

ehenkes
09.06.2007, 10:47
Ich verwende (unter MS Windows) die Datei make-lib.bat mit dem Inhalt:

make clean
make all
make install

Masterarthur
09.06.2007, 13:40
Wenn ich die Batchdatei „make-lib“ aufrufe bekomme ich immer die Rückmeldungen ***no rule to make target…***. Was fehlt da?
Ich verwende WinAVR-20070525 mit Programmer's Notepad 2 v0.7.667 und die Asuro Library 2.70rc3.

ehenkes
09.06.2007, 13:55
Hier ist die make-Datei:


################################################## #############################
# Makefile for the project AsuroLib
################################################## #############################

## General Flags
PROJECT = AsuroLib
MCU = atmega8
TARGET = AsuroLib.elf
CC = avr-gcc.exe
AR = avr-ar
OBJDUMP = avr-objdump

## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -I./inc
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0


## Objects that must be built in order to link
OBJECTS = globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o\
motor.o motor_low.o print.o rc5.o sound.o switches.o\
time.o uart.o version.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

# Define directories, if needed.
DIRAVR = C:/WinAVR
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib

LIB = asuro
LIBFILE = lib$(LIB).a
HEADER = asuro.h

## Build
all: $(LIBFILE)
rm -rf *.o *~

%.o: %.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

$(LIBFILE): $(OBJECTS)
$(AR) cru $(LIBFILE) $(OBJECTS)

## Clean target
clean:
rm -rf *.o *~ $(LIBFILE)
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
rm -rf dep/*.d

install:
cp $(LIBFILE) $(DIRLIB)/$(LIBFILE)
cp inc/$(HEADER) $(DIRINC)/$(HEADER)

lst: $(OBJECTS:%.o=%.lst)


%.lst: %.o
$(OBJDUMP) -h -S $< > $@

## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)

Masterarthur
09.06.2007, 14:02
Sorry dafür, dass ich mich ein wenig unbeholfen anstelle. Was muß ich jetzt genau mit dem Inhalt anfangen? Warum habe nur ich das Problem?

ehenkes
09.06.2007, 15:21
Du könntest in deine Datei Makefile schauen und vergleichen.
Filestruktur:
C:\ASURO_SRC\AsuroLib\lib dort befindet sich das Makefile, die Implementierungsfiles (asuro.c & Co.) und libasuro.a.
C:\ASURO_SRC\AsuroLib\lib\inc dort befinden sich die Header, auch myasuro.h. Kopiere mal den Header asuro.h aus inc eins höher nach lib. Das passiert bei mir z.B. automatisch, wenn ich make-lib.bat starte.

inka
09.06.2007, 15:40
ich hätte da wahrscheinlich auch schwierigkeiten. Bin nur noch gar nich so weit reingekommen...
Bei mir ist die libasuro.a in "C:\Programme\WinAVR\avr\lib\". Muss jetzt die make-lib.bat auch dorthin? Wo sind/sollen sein denn bei mir die files

makefile
make clean
make all
make install????

Sternthaler
09.06.2007, 15:54
Es lohnt sich auf alle Fälle auch einmal die mit der Lib mitgelieferte Doku zu lesen.
Wenn ihr die Lib geholt und entpackt habt, liegt sie ja irgendwo bei euch auf der Festplatte. Das Verzeichnis enthält weitere Unterverzeichnisse.
- lib : Sourcen für die Library
- examples: Komplette PrograMMe zum testen der einzelnen Funktionen
- doc : Wie der Name schon andeutet die DOKUMENTATION.

In doc gibt es den Unterordner html
Darin ist die Datei index.html
Doppelklick darauf und schon kommt die Startseit der Doku.
Auf der STARTSEITE wird erklärt, wie man was zu tun hat: Installieren, bei Bedarf compilieren (hier ist Bedarf, da ja schliesslich die myasuro.h neu berücksichtigt werden soll) und auch wohin dann libasuro.a und der Rest kopiert werden soll. Dabei muss gar nicht kopiert werden, da ja mit make install schon alles erledigt wird.

P.S.: Kleiner Rechtschreibfehler in der Doku:
Unter dem Punkt 'Compilieren der Asuro Library' steht, dass mit der Datei lib/make-kib.bat alles erledigt werden kann. Soll natürlich lib/make-lib.bat heißen.

inka
09.06.2007, 16:02
habe ich schon gelesen:
---------------------
Installation über das AsuroLib-vXXX-Setup.exe File
Bei der Installation durch die AsuroLib-vX.XX-Setup.exe sind keine weiteren Schritte notwendig, es sei denn, die Installation konnte nicht vollständig abgeschlossen werden, da das WinAVR Verzeichnis nicht lokalisiert werden konnte
-------------------------

heisst also, weil bei mir die installation ohne probleme ablief lediglich im "/lib" - siehe weiter oben - verzeichnis die "make-lib.bat" zu starten. Blos da ist sie nicht :-(
deshalb versuche ich ja die ganze struktur etwas zu verstehen...

Sternthaler
09.06.2007, 16:06
@inka
Wie, bei dir fehlt die make-lib.bat?????
Sprechen wir von der Lib aus neue Asuro Lib V2.70 (Release Candidate 3) (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26594)???

Ich hole die gerade mal neu. ICH nehme immer 'AsuroLib-v270rc3.zip' und NICHT die Setup-Datei!!!

[Edit] 3 Minuten später: In der ZIP-Version ist das make-lib.bat vorhanden.
[Edit] 5 Minuten später: In der Setup-Version aber auch!

Kann es sein, dass wir bei dem LIB-Verzeichnis von unterschiedlichen Verzeichnissen reden?
Die Setup-Version legt ein neues Verzeichnis unter C: an.
C:\ASURO_SRC\AsuroLib <--- Ab hier gehen wird in das richtige lib-Verzeichnis.

Masterarthur
09.06.2007, 16:15
In der Setup Version ist die Batch auch vorhanden! Trotzdem komme ich auch nicht weiter. Habe schon alles gelesen und entsprechend ausprobiert.

Sternthaler
09.06.2007, 16:18
@m.a.r.v.i.n
Mein Latein ist am Ende. Kannst du hier bitte weiterhelfen?

ehenkes
09.06.2007, 16:34
Warum wird asuro.h von inc nach lib kopiert? Verdopplung einer Datei schafft bei Änderungen doch nur Verwirrung, wenn man die falsche Datei erwischt.

Masterarthur
09.06.2007, 17:22
Habe gerade die zip version probiert und siehe da, es funktioniert. Make-lib hatte keine Probleme. Es scheint also einen Unterschied zur setup version zu geben.

Sternthaler
09.06.2007, 18:08
@Masterarthur
Na super, viel Spaß beim weiteren Asuro-Sucht-System. (Ja, doppeldeutig gemeint ;-) )

inka
09.06.2007, 20:01
@sternthaler


Kann es sein, dass wir bei dem LIB-Verzeichnis von unterschiedlichen Verzeichnissen reden?
Die Setup-Version legt ein neues Verzeichnis unter C: an.
C:\ASURO_SRC\AsuroLib <--- Ab hier gehen wird in das richtige lib-Verzeichnis.

ja. sorry, habe verzeichnisse verwechselt, ich arbeite ja im nezwerk und habe die datei lokal gesucht :-(

Sternthaler
09.06.2007, 20:25
@inka
Hauptsache, das Problem ist gefunden. Der Rest ist Spaß

inka
09.06.2007, 21:33
du hast recht...:-)
bis aber heute recht früh dran stelle ich gerade fest :-)

Sternthaler
09.06.2007, 21:43
Nun, in einem anderen Beitrag über Asuros, die mit der Fernbedienung gesteuert werden sollen, sprach ich von einer Radtour. Morgen FRÜH 'darf' ich eine Verwandschaft besuchen, die ich nicht kenne. Also muss ich heute mal etwas früher meiner Sucht nachgehen.

inka
09.06.2007, 22:03
hab mich über die fernsteuerung köstlich amüsiert, war gerade vom spaziergang mit meiner besseren hälfte zurückgekehrt. Hab keine angst, wir werden nicht ferngesteuert :-)
Und viel spass morgen mit der verwandschaft, vielleicht habe die auch einen asuro?

Sternthaler
11.06.2007, 00:49
So, jetzt stimmt die Zeit wieder.
Nein, die hatten keinen Asuro. Dafür aber Reh im Kochtopf, nette Kinder, Dorffest, und gute Laune. War also gar nicht so schlimm ;-)

Hab keine angst, wir werden nicht ferngesteuert
Beweise? 8-[

inka
11.06.2007, 02:52
ob´s ansteckend ist? Das mit dem asuro und der zeit meine ich...
edit zu normaler zeit [6:20] Beweise? Ich kann mich ganz schwach daran ernerrn auch schon meine bessere hälfte gefragt zu haben ob sie spazieren gehen möchte...
Bin gespannnt wann endlich der prozessor von arexx kommt...

Sternthaler
11.06.2007, 22:02
ob´s ansteckend ist? Das mit dem asuro und der zeit meine ich...Bestimmt. Bei mir wird's immer früher.

... gefragt zu haben ob sie spazieren gehen möchte...OK, gilt als Beweis.

Bin gespannnt wann endlich der prozessor von arexx kommt...Bestimmt nicht um 03:52. Hättest schon vorher in's Bett gehen dürfen :D

inka
19.06.2007, 07:22
sicherheitshalber noch einmal nachgefragt/zusammengefasst:

- die makelib.bat soll in dem verzeichnis sein in dem die sourcen sind, die im avr-studio in die projekte eingebunden werden, bei mir:

Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\lib\make-lib.bat

ok?

- im darunter liegendem verzeichnis "inc" sind die *.h dateien, also auch die myasuro.h, ok?

- die makelib.bat übersetzt die libasuro.a im sourceverzeichnis und kopiert diese in das "avr/lib" verzeichnis (angelegt bei der installation von avr) bei mir:

C:\Programme\WinAVR\avr\lib\libasuro.a

ok?

m.a.r.v.i.n
19.06.2007, 08:48
Hi inka,

soweit ist das alles richtig. Die Frage ist nur noch, wo liegen deine Projekte? Da in den Beispiel Makefiles die Header-Dateien (myasuro.h u. asuro.h) relativ eingebunden werden, sollten deine Projekte ebenfalls im Verzeichnis der AsuroLib liegen. z.B.:
Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\examples\SecondTry\

Ein paar Infos zur einfachen Projekterstellung für den Asuro mit AVR Studio finden sich hier (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AVRStudio)

inka
19.06.2007, 09:29
hi m.a.r.v.in,

meine projekte liegen so (beispiel):

Y:\georg\hobby\roboter\asuro\tests\test_lib_2_7\te st_lib_2_7.c

ich habe es als verzeichnisse angelegt, pro projekt eines, aufgeteilt ab:
Y:\georg\hobby\roboter\asuro\...

ich sehe schon, das gibt ein problem, wird die myasuro.h deshalb nicht eingebunden? Oder denke ichs nur dass das nicht passiert?

Im avr-studio gibt es die möglichkeit verzeichnisse einzubinden, so habe ich das auch mit den sourcen gemacht:
Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\lib\inc\

m.a.r.v.i.n
19.06.2007, 09:58
Hi,



ich sehe schon, das gibt ein problem, wird die myasuro.h deshalb nicht eingebunden?

Genau das ist das Problem. Aber das kriegen wir schon hin. So spontan fallen mir 2 Lösungen ein:

1. Lösung

* du kopierst die Header Dateien (asuro.h und myasuro.h) in den Ordner vom WinAVR Compiler 'C:\Programme\WinAVR\avr\include' und änderst in deinen Programmen alle Zeilen


#include "asuro.h"
#include "myasuro.h"

in


#include <asuro.h>
#include <myasuro.h>


2. Lösung

Du änderst das Makefile für deine Projekte: Dazu mußt du bei WinAVR Studio die Einstellung 'Use external Makefile' verwenden, wie im AsuroWiki beschrieben.
Folgender Abschnitt ändern


CFLAGS = -g -O$(OPT) -I../../lib/inc\
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)

VPATH=../../lib

in


CFLAGS = -g -O$(OPT) -IY:/georg/hobby/roboter/asuro/_asuro_lib/2_7_rc3/AsuroLib/lib/inc\
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)

VPATH=Y:/georg/hobby/roboter/asuro/_asuro_lib/2_7_rc3/AsuroLib/lib

inka
19.06.2007, 10:47
hi m.a.r.v.i.n,

das sind die einzigen zeilen im makefile die mit CFLAGS anfangen:

CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -I./inc
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

m.a.r.v.i.n
19.06.2007, 12:27
Hi inka,

nicht im Makefile der AsuroLib, sondern im Makefile des Projekts muß man die Änderungen machen.

inka
19.06.2007, 12:48
hi marvin,

so sieht das makefile für das letzte projekt das ich compiliert habe aus:

################################################## #############################
# Makefile for the project test_lib_2_7
################################################## #############################

## General Flags
PROJECT = test_lib_2_7
MCU = atmega8
TARGET = test_lib_2_7.elf
CC = avr-gcc.exe

## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=8000000UL -Os -fsigned-char
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0


## Include Directories
INCLUDES = -I"Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\lib\inc"

## Objects that must be built in order to link
OBJECTS = test_lib_2_7.o asuro.o switches.o time.o inka.o leds.o encoder.o globals.o motor_low.o motor.o encoder_low.o print.o uart.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

## Build
all: $(TARGET) test_lib_2_7.hex test_lib_2_7.eep size

## Compile
test_lib_2_7.o: ../test_lib_2_7.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

asuro.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/asuro.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

switches.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/switches.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

time.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/time.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

inka.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/inka.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

leds.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/leds.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

encoder.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/encoder.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

globals.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/globals.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

motor_low.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/motor_low.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

motor.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/motor.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

encoder_low.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/encoder_low.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

print.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/print.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

uart.o: ../../../_asuro_lib/2_7_rc3/AsuroLib/lib/uart.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@

%.eep: $(TARGET)
avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@

%.lss: $(TARGET)
avr-objdump -h -S $< > $@

size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}

## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) test_lib_2_7.elf dep/* test_lib_2_7.hex test_lib_2_7.eep

## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep*)/

da weiss ich aber auch nicht wo ich die änderungen machen sollte :-(

m.a.r.v.i.n
19.06.2007, 13:33
Hi inka,

ok, verstehe. Du hast dir das Makefile vom AVR Studio zusammen basteln lassen. Das wäre eine weitere Möglichkeit. Allerdings wird dann nicht die libasuro.a mit eingebunden, sondern alle Quellfiles einzeln, aber egal.

Das einzige was mir daran auffällt, sind die Backslashes bei


## Include Directories
INCLUDES = -I"Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\lib\inc"


Vielleicht stolpert der AVR-GCC darüber. Probiers mal mit Slashes.



## Include Directories
INCLUDES = -I"Y:/georg/hobby/roboter/asuro/_asuro_lib/2_7_rc3/AsuroLib/lib/inc"


oder mit relativen Pfadangaben, wie bei den Sourcefiles.


## Include Directories
INCLUDES = -I"../../../_asuro_lib/2_7_rc3/AsuroLib/lib/inc"

inka
19.06.2007, 14:08
ok, danke erstmal m.a.r.v.i.n,
werde ich heute abend ausprobieren.
Aus der o.a. makefile und dem geschriebenem ergeben sich noch folgende fragen:
- das makefile wird beim anlegen eines jeden neuen projektes von AVR neu erzeugt?
- wonach? habe ich eine chance dass die änderungen die ich hier machen muss automatisch bei neuen projekten übernommen werden?
- wie wird da eigentlich die myasuro.h eingebunden? Die asuro.h steht ja in der asuro.c, so kommt die ja wohl rein, aber was passiert bei der myasuro? wird das mit dem includen der verzeichnisse gemacht? Für alle *.h dateien die in dem verzeichnis sind?
Es ist noch ein ziemlich dichter dschungel für mich :-(

inka
19.06.2007, 15:33
das kompileieren der datei verlief nach dem ändern der backslashes in slashes problemlos, keine fehlermeldungen. Ob nun die myasuro.h berücksichtigt wurde weiss ich nicht. Der ablauf des programmes änderte sich m.e. nach nicht...
Wie kann ich das überprüfen?
btw: aus den slashes wurden nach der kompilierung wieder backslashes...

ehenkes
19.06.2007, 15:35
Header-Dateien sind das Deklarations-Futter für xxx.c (Sourcecode) oder xxx.lib (statische Bibliotheken). Schau mal in die xxx.c, die myasuro.h benötigen, z.B. asuro.c, encoder.c oder switches.c. Dort wirst Du myasuro.h finden.

Zunächst sollte man verstehen, wie eine ausführbare binäre Datei aus Sourcecode entsteht. Hierzu verwendet man wahrscheinlich unbewusst drei Werkzeuge:

Precompiler / Präprozessor
Compiler
Linker

Der Precompiler / Präprozessor durchforstet den Sourcecode, um spezielle Anweisungen auszuführen. Diese Anweisungen beginnen mit #.
In unserem Beispiel erkennt der Precompiler z.B. #include "asuro.h" und setzt an dieser Stelle den entsprechenden Sourcecode des Headers ein. Auf diese Weise wird der gesamte Sourcecode bearbeitet, also auch alle #define ... ... ersetzt.

Der resultierende Sourcecode wird dem Compiler übergeben. Dieser erzeugt dann Objektdateien (xxx.o).

Diese werden vom Linker zusammen mit statischen Bibliotheken in eine lauffähige Programmdatei überführt.

Bei MS Windows gibt es noch dynamische Bibliotheken (dll), die erst während der Ausführung des Programms - also dynamisch - gebunden werden ( http://www.henkessoft.de/C++/WinAPI/WinAPI%20Kapitel%201%20bis%206/api6.htm ).