Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C Modularisierung

Diskussion: C Modularisierung im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Ich möchte mir die Modularisierung in C etwas näher bringen. Ich habe folgenden Versuch gemacht um es etwas besser ...

Antwort
Alt 29.01.11, 17:18   #1 (permalink)
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard C Modularisierung

Anzeige

Ich möchte mir die Modularisierung in C etwas näher bringen.
Ich habe folgenden Versuch gemacht um es etwas besser zu verstehen. Komme aber leider nicht zu meinem Ziel

Ich habe für das modul einen Ordner "modules" angelegt.
In diesem Ordner modules sind enthalten

test.c

Code:
#include "test.h"

int func1(int x)
{
	return x;
}

test.h

Code:
#ifndef TEST_H
#define TEST_H

extern int func1(int x);
 
#endif

und im Hauptordner ist die Hauptdatei enthalten

main.c

Code:
#include <stdlib.h>
#include <test.h>

int main()
{
	int test = func1(4);
	
	return 0;
}

das Modul compile ich mit

Code:
cc -c -Wall test.c
funktioniert ohne fehler


die Hauptdatei compile ich mit

Code:
gcc -Imodules -o main main.c
Den header test.h findet er, da er kein Fehler deshalb ausgibt, davon geh ich mal aus, dass das an sich funktioniert, allerdings habe ich folgenden compiler fehler

Code:
gcc -Imodules -o main main.c
/tmp/ccWIyNhi.o: In function `main':
main.c:(.text+0xe): undefined reference to `func1'
collect2: ld returned 1 exit status
Ich verstehe leider nicht an was das liegt. Hilfe wäre wirklich super.

Danke
gugugs ist offline   Mit Zitat antworten
Alt 29.01.11, 17:25   #2 (permalink)
 
Registriert seit: 09.12.09
Thunder11 Leistung: Z3
Likes: 0
Standard

Wenn du test.c kompilierst bekommst du eine Objektdatei heraus (wahrscheinlich test.o). Deine main.c soll also die Funktion aus dieser Objektdatei verwenden. Dazu müssen sie gelinkt werden. Das sagst du dem gcc indem du ihm die Objektdatei auch übergibst (er gibt die Daten dann an den Linker weiter):
Code:
gcc -Imodules -o main main.c test.o
mfg Christian
__________________
B4 09 BA 08 01 CD 21 C3 48 61 6C 6C 6F 20 57 65 6C 74 21 24

Geändert von Thunder11 (29.01.11 um 19:58 Uhr)
Thunder11 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 29.01.11, 17:32   #3 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

wunderschön, danke.

Ich habe in Tutorials gesehen, dass man die main.c auch als Objekt cimpilen muss und dann mit cc linken muss. Dass ging so auch bei mir.
Aber das hat mich sehr irritiert, da ich es mit gcc -I... -o..... usw. machen wollte.
Im nachhinein ist es logisch, dass es ja so trotzdem irgendwie gelinkt werden muss.
Ich werde mit mal make anschauen
gugugs ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C Modularisierung
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61