C Modularisierung

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
 
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
 
Zuletzt bearbeitet:
:P 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 ;)
 
Zurück
Oben