Problemy w nauce podziału na moduły w języku C

0

Witam!
Dopiero zaczynam naukę i pojawił się problem którego nie potrafię rozwiązać. Otóż stworzyłem prosty plik nagłówkowy *.h oraz 2 pliki *.c Wszystkie trzy są poniżej. Problem polega na tym, że podczas próby kompilacji biblioteka.c linker krzyczał o tym:

  • In function `main': *
  • [Linker error] C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c undefined reference to `WinMain@16' *
  • ld returned 1 exit status *

Kiedy chcę skompilować main.c to linker informuje, że nie zna zmiennej "suma" tj. jest coś takiego:

  • [Linker error] C:\Users\Krzysiek\AppData\Local\Temp\cc0GQsLI.o:main.c:(.text+0x1e): undefined reference to `suma' *
    • ld returned 1 exit status *

kody:

//plik: main.c
 #include <stdio.h>
 #include "biblioteka.h"

 int main()
 {
  printf("%d",suma(10,15));
  scanf("%d");
 }


//Plik: biblioteka.cpp
#include "biblioteka.h"
#include <stdio.h>

int suma(int a,int b)

{
	return(a+b);
}


//Plik: biblioteka.h
#ifndef biblioteka_h
#define biblioteka_h

int suma(int a,int b);

 #endif

Mam dwa pytania:
1.Które komunikaty są normalne (o ile takie są) i nie trzeba się nimi przejmować?
2.Gdzie popełniłem błąd, że to nie chce zadziałać?

0

w pliku biblioteka.cpp dodaj #include "biblioteka.h"
a w pliku biblioteka.h dodaj:
extern "C"
{
int suma(int a, int b);
}

problem wynika z tego, że gdy kompilujesz pliki C, to funkcje mają rzeczywiście takie nazwy jak podajesz (albo z podkreślnikiem z przodu - nie jestem pewien), a gdy kompilujesz CPP to nazwy mają dodatkowe śmieci na końcu informujące o typach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1