Selamün Aleyküm.
Bundan bir önceki "İnşa Araçları" adlı konumda Ali Hocam g++ a.cpp b.cpp -o app şeklinde derlemem gerektiğini söylediniz, yoksa linker sorunu olacağını söylediniz. Şimdiki konum işte bu konuda. Şöyle bir örnek var: http://www.tutorialspoint.com/makefile/why_makefile.htm. Buradaki örneği g++ hello.cpp -o hello olarak derlemeye çalıştım ve hata aldım. Sonra bir tane de kendim örnek yaptım şu şekilde:
// functions.h
int factorial(int n);
int max(int x, int y);
// functions.cpp
#include <functions.h>
int factorial(int n)
{
return (n > 1) ? n * factorial(n - 1) : 1;
}
int max(int x, int y)
{
return (x > y) ? x : y;
}
// main.cpp
#include <iostream>
#include "functions.h"
using namespace std;
int main()
{
cout << "Factorial of 5 is " << factorial(5);
cout << endl;
cout << "Max(5, 7) = " << max(5, 7) << endl;
return 0;
}
Terminalde şu şekilde: 'g++ main.cpp -o main' derlemeye çalıştım fakat hata verdi. Dediğim gibi hatanın linker'dan kaynaklandığını biliyorum. Fakat bu örneği mesela QtCreator gibi bir ide'de yazınca çalıştır diyorsun ve çalışıyor fakat bir editörde yazında terminalden çalışmıyor. Acaba bu linker functions.cpp'de fonksiyon kodları olduğu halde main'de sadece functions.h yi çağırınca nasıl birbirine bağlıyor? Terminalde neden 'g++ main.cpp -o main' yazınca çalışmıyor da 'g++ main.cpp functions.cpp -o main' yazınca çalışıyor? Tüm cpp dosyalarını derlemeyle linker'ın arasında nasıl bir bağlantı var? Çalıştığım kitapta bunu şu an görmedim, sanırım ilerki sayfalarda bahsedecek ama şu an merak ettim.
Ali Hocam cevap verirseniz sevinirim, nasıl olsa sitede ikimiz varız genelde :)
Teşekkürler!
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]