12-ameliy_paradigma_qq
.pdf12-ámeliy jumıs. Orınlanıwshı programmalardı dúziw
Jumıstıń maqseti: Programmalıq támiynattı islep shıǵıw procesiniń aqırǵı basqıshı – orınlanıwshı (executable) fayllardı jaratıw procesin úyreniw. C++ tilinde jazılǵan kodtı kompilyaciya (compilation), biriktiriw (linking) hám jıynaw (building) proceslerinen ótkiziw. Statikalıq hám dinamikalıq kitapxanalardı (.lib,
.dll / .a, .so) qollanıw, Makefile yamasa CMake sıyaqlı avtomatlastırıw quralların paydalanıw hám kros-platformalıq (Windows/Linux) orınlanıwshı fayllar jaratıw kónlikpelerin qáliplestiriw.
Teoriyalıq bólim:
Orınlanıwshı programma – bul operaciyalıq sistema (OS) tárepinen tikkeley júklenip, orınlanıwı múmkin bolǵan binar fayl (.exe, .out).
Jaratıw basqıshları:
1.Preprocessing: Kodtaǵı #include hám #define direktivaların qayta islew.
2.Kompilyaciya (Compilation): Kodtı (.cpp) mashina kodına (.obj yamasa
.o) aylandırıw.
3.Biriktiriw (Linking): Barlıq obyektlik fayllardı hám kitapxanalardı biriktirip, bir pútin .exe fayl jaratıw.
4.Kitapxanalar:
*Statikalıq (.lib/.a): Kodtıń ishine tolıq kóshiriledi. Programma kólemi úlkeyedi, biraq ǵárezsiz boladı.
*Dinamikalıq (.dll/.so): Kod sırtqı faylda qaladı. Programma kishirek boladı, biraq jumıs islew ushın sol fayl kerek.
ÁMELIY BÓLIM:
Komandalıq qatar (Command Line - g++) hám kóp fayllı proektler menen islesiwdi kórip shıǵamız.
1-mısal: Qol menen kompilyaciya hám biriktiriw
Másele: 3 fayldan turatuǵın proektti g++ arqalı jıynaw.
Fayllar: math_lib.h, math_lib.cpp, main.cpp.
Kod (math_lib.h): #ifndef MATH_LIB_H #define MATH_LIB_H int add(int a, int b); #endif
Kod (math_lib.cpp): #include "math_lib.h" int add(int a, int b) {
return a + b;
}
Kod (main.cpp): #include <iostream> #include "math_lib.h" using namespace std; int main() {
cout << "Nátiyje: " << add(5, 7) << endl; return 0;
}
Terminal buyrıqları (Komandalar):
1. Obyektlik fayllardı jaratıw (Kompilyaciya): g++ -c math_lib.cpp -o math_lib.o
g++ -c main.cpp -o main.o
2. Biriktiriw (Linking) hám .exe jaratıw: g++ main.o math_lib.o -o my_program.exe
3. Iske túsiriw:
./my_program.exe (Windows) yamasa ./my_program (Linux)
2-mısal: Makefile qollanıw (Avtomatlastırıw)
Másele: Kóp fayllı proektti hár saparı qol menen jazbastan, make buyrıǵı arqalı jıynaw.
Fayl (Makefile):
#O'zgeriwshiler CXX = g++
CXXFLAGS = -Wall -g
#Maqset: orınlanıwshı fayl
my_app: main.o math_lib.o
$(CXX) main.o math_lib.o -o my_app
# main.o jaratıw
main.o: main.cpp math_lib.h
$(CXX) $(CXXFLAGS) -c main.cpp
# math_lib.o jaratıw
math_lib.o: math_lib.cpp math_lib.h $(CXX) $(CXXFLAGS) -c math_lib.cpp
# Tazalaw
clean:
rm *.o my_app
Terminal buyrıǵı:
make -> (Avtomat túrde barlıq qádemlerdi orınlaydı hám my_app jaratadı) make clean -> (Qosımsha fayllardı óshiredi)
3-mısal: Statikalıq kitapxana jaratıw (.lib / .a)
Másele: math_lib kodın statikalıq kitapxanaǵa aylandırıw hám onı qollanıw. Terminal buyrıqları:
1. Obyektlik fayl:
g++ -c math_lib.cpp -o math_lib.o
2. Arxivlew (Kitapxana jaratıw): ar rcs libmath.a math_lib.o
3. Kitapxana menen birge kompilyaciya (Linking): g++ main.cpp -L. -lmath -o static_app
(-L. -> házirgi papkadan izlew, -lmath -> libmath.a nı qosıw)
4-mısal: Dinamikalıq kitapxana jaratıw (.dll / .so) Másele: Shared Library jaratıw.
Terminal buyrıqları (Linux/MinGW):
1. Poziciyaǵa ǵárezsiz kod (fPIC) penen kompilyaciya: g++ -c -fPIC math_lib.cpp -o math_lib.o
2. Shared object (.so) jaratıw:
g++ -shared math_lib.o -o libmath.so
3. Qollanıw:
g++ main.cpp -L. -lmath -o dynamic_app
(Iske túsiriw ushın libmath.so faylı sistemalıq jolda yamasa qasinda bolıwı kerek).
5-mısal: CMake qollanıw (Kros-platformalıq) Másele: CMakeLists.txt arqalı proekt dúziw.
Fayl (CMakeLists.txt): cmake_minimum_required(VERSION 3.10) project(MyProject)
set(CMAKE_CXX_STANDARD 11)
# Kitapxana hám orınlanıwshı fayl add_library(MathLib math_lib.cpp) add_executable(MyApp main.cpp)
# Biriktiriw target_link_libraries(MyApp MathLib)
Terminal buyrıqları: mkdir build
cd build cmake .. cmake --build .
ÁMELIY TAPSÍRMALAR
1-tapsırma: Hello World kompilyaciyası. hello.cpp faylın jaratıń.
Terminaldan (g++) paydalanıp, onı kompilyaciya qılıń.
-o bayraǵın (flag) qollanıp, orınlanıwshı fayldıń atın my_hello.exe dep ózgertiń.
2-tapsırma: 3 fayllı proekt.
geometry.h (prototipler), geometry.cpp (maydan esaplaw funkciyaları) hám main.cpp (qollanıw) faylların jaratıń.
Olardı aldın bólek-bólek kompilyaciya qılıp (.o), keyin biriktiriń.
3-tapsırma: Óz Makefile-ıńızdı jazıń.
Aldınǵı tapsırmadaǵı (geometry) proekt ushın Makefile dúziń.
Onda all (jıynaw) hám clean (tazalaw) komandaları bolsın.
4-tapsırma: Statikalıq kitapxana (MyUtils).
utils.cpp ishindegi bir neshe paydalı funkciyalardı (mısalı, stringti úlken háripke aylandırıw) statikalıq kitapxanaǵa (libutils.a) aylandırıń.
Keyin basqa main.cpp faylınan usı kitapxananı qollanıp kórsetiń.
5-tapsırma: Kompilyator optimizaciyası.
Úlken massivti (mısalı 100 mln element) sortlaytuǵın programma jazıń.
Onı ápiwayı (g++ main.cpp) hám optimizaciyalanǵan (g++ -O2 main.cpp yamasa - O3) túrde kompilyaciya qılıń.
Eki versiyanıń orınlanıw waqtın (execution time) ólshep, ayırmashılıǵın túsindiriń.
