Linkowanie dwóch plików w dev-c++

Odpowiedz Nowy wątek
2011-09-05 16:39
pyt.
0

W rodziale 9.5 Grębosza jest mowa o linkowaniu plików.
PLIK A

#include<iostream.h>
int func(int a, int b){
    return a + b;
}

PLIK B

#include<iostream.h>
extern int func(int, int);
 
int main(){
     cout<<func(2, 2);
     getchar();
}

Nie wiem jak to zlinkować, do jakeigo formatu zapisać powyższe pliki, etc.
Dodam, że korzystam z Dev-C++

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-09-05 16:42
0

Sprawa pierwsza - korzystasz ze starej symfonii (w standardzie przy dołączaniu biblioteki iostream nie podajemy już rozszerzenia .h), kup sobie symfonię C++ STANDARD.
Sprawa druga - zwykle linkowaniem przejmować się nie musisz, bo robi to za Ciebie kompilator (automatycznie wymusza działanie linkera).
Sprawa trzecia - oba pliki zapisujesz z rozszerzeniem .cpp

edytowany 3x, ostatnio: transient, 2011-09-05 16:47

Pozostało 580 znaków

2011-09-05 16:47
0

Sprawa czwarta - zmień Dev-C++ na np. CodeBlocks.

Pozostało 580 znaków

2011-09-05 19:09
pyt.
0

Zapisałem oba pliki do .cpp w tym samym folderze, i jak mam to teraz skompilować w całość, żeby uzyskać exeka?

Pozostało 580 znaków

2011-09-05 19:45
1

W przypadku IDE jak Dev (...) musisz stworzyć projekt i te pliki dodać do tegoż projektu. Gdybyś kompilowal to ręcznie z konsoli to musiałbyś zrobić coś w stylu

g++ -ansi -pedantic -Wall -Wextra plik1.cpp plik2.cpp -o wynik.exe
edytowany 1x, ostatnio: Shalom, 2011-09-05 19:45

Pozostało 580 znaków

2011-09-05 21:24
pyt.
0

Dzięki @Shalom pomogło. Mam jeszcze zapytanie.
Napisałem w C funkcje:

#include <stdio.h>
void func2 () {
   printf ("Udalo Ci się odpalic program.");
} 

i w PLIK 2 dodałem:

#include<iostream>
using namespace std;
extern int func(int, int);
extern "C" void func2();
int main(){
     cout<<func(2, 2);
     func2();
     getchar();
}

Dlaczego pojawił się error podczas kompilacji?

[Linker error] undefined reference to `func2'

Pozostało 580 znaków

2011-09-05 21:41
0

A ten plik niby w C kompilowałeś jako C czy jako C++?

Pozostało 580 znaków

2011-09-05 21:53
pyt.
0

Całość jak widać po kodzie kompilowałem w C++. Zrobiłem tak jak Grębosz przedstawił to w rozdziale 9.4

Pozostało 580 znaków

2011-09-05 21:54
pyt.
0

aha jeżeli chodzi o pytanie @Shalom to zapisałem do .c, natomiast pozstałe pliki są w .cpp

Pozostało 580 znaków

2011-09-05 23:59
0
/* plik1.c */
#include <stdio.h>
void func2 (void) {
   printf ("Udało Ci się odpalić program.");
} 
// plik2.cpp
int func(int a, int b) {
    return a + b;
}
// plik3.cpp
#include<iostream>
using namespace std;
extern int func(int, int);
extern "C" void func2();
int main(){
     cout<<func(2, 2);
     func2();
     getchar();
}

wszystkie trzy pliki muszą trafić do kompilacji i linkera.

edytowany 2x, ostatnio: Azarien, 2011-09-06 00:01

Pozostało 580 znaków

2011-09-06 02:20
pyt.
0

No cóż stworzyłem nowy projekt i dodałem do niego plik1.c, plik2.cpp, plik3.cpp
Po całkowitej przebudowie (REBULID) wywala mi [Linker error] undefined reference tofunc2'`
Natomiast extern "C" void func2(); zmienie na extern void func2(); projekt kompiluje się bez problemu. O co kaman?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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