Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

12-ameliy_paradigma_qq

.pdf
Скачиваний:
0
Добавлен:
18.01.2026
Размер:
211.91 Кб
Скачать

12-á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ń.

Соседние файлы в предмете Programmalastiriw paradigmalari