Зміст
Введення
1 Компіляція програм мовою C/C + +
2 Компіляція декількох файлів
3 Створення бібліотек об'єктних файлів
3.1 Бібліотеки об'єктних файлів
3.2 Створення статичної бібліотеки
3.3 Створення динамічної бібліотеки
3.4 Використання динамічних бібліотек
4 Створення динамічних бібліотек
4.1 Функції роботи з динамічними бібліотеками
4.2 Створення динамічної бібліотеки для вирішення системи лінійних рівнянь
Висновки
Список використаної літератури
В
Введення
Прості програми зазвичай складаються з одного вихідного файлу. Але якщо програми стає великою, її рекомендується їх розбивати на шматки, які функціонально обмежені і закінчені. Так як процес редагування при великому вихідному тексті стає складним і пошук невеликий помилки може спричинити за собою вимушене "вивчення" коду заново. Також великий файл програми збільшує час компіляції.
Але якщо кожна функція буде міститися в окремому файлі, то таких файлів може виявитися десятки або навіть сотні. Управляти такою кількістю файлів дуже складно. Для цього був придуманий механізм створення бібліотек об'єктних файлів.
Бібліотека об'єктних файлів - це файл містить кілька об'єктних файлів, які будуть використовуватися разом у стадії лінковки програми. Бібліотека містить символьний індекс, який складається з назв функцій і змінних і т.д., які містяться в бібліотеці. Це дозволяє прискорити процес лінковки програми, так як пошук функцій і змінних в об'єктних файлах бібліотеки відбувається набагато швидше, ніж пошук в наборі зазначених об'єктних файлів. p> Тому використання бібліотеки дозволяє компактно зберігати всі необхідні об'єктні файли в одному місці, і при цьому значно підвищити швидкість компіляції. p> У курсовій роботі наведені приклади створення і використання статичних і динамічних бібліотек. Д розроблено кілька простих динамічних бібліотек (зведення числа в ступінь і рішення системи лінійних рівнянь)
В
1 Компіляція програм мовою C/C + +
Компілятор перетворює код програми на "людському" мові в об'єктний код зрозумілий комп'ютеру. Компіляторів під Linux існує багато, практично для кожного поширеного мови. Більшість самих затребуваних компіляторів входить в набір GNU Compiler Collection , відомих під назвою GCC (# "1.files/image001.gif">;;;
;
Програма в Як параметри приймає значення коефіціентів системи і назва функції, яку вона використовує.
Створимо динамічну бібліотеку:
Так як функція повертає два результати x1 і x2 в програмі будемо використовувати структуру.
"mytype.h" :
struct DPair {
double first;
double second;
};
Struct DPair (* powerfunc) (double, double, double, double, double, double);
"libsysur.c" :
# include "Mytype.h"
struct DPair sys2 (double a11, double a12, double a21, double a22, double b1, double b2) {
// nahodim opredelitel sistemy
struct DPair dPair;
double opr = a11 * a22-a12 * a21;
if (Opr! = 0) {
double ao11 = a22; double ao12 =-a21;
double ao21 =-a12; double ao22 = a11;
dPair.first = (ao11 * b1 + ao21 * b2)/opr;
dPair.second = (ao12 * b1 + ao22 * b2)/opr;
}
return dPair;
}
Створюємо динамічну бібліотеку libsysur . so наступними командами:
bash-3.00 # gcc -FPIC-c libsysur.c
bash-3.00 # gcc -Shared libsysur.o-o libsysur.so
Створюємо основну програму:
"sysur.c" :
# include
# include
# include "Mytype.h"
int main (int argc, char * argv []) {
void * Ext_library;// Хандлер зовнішньої функції
double a11; double a12; double a21; double a22;
double b1; double b2;
double (* Powerfunc) (double a11, double a12, double a21, double a22, double b1, double b2) ;//змінна, для зберігання адреси функції
В
// завантаження бібліотеки
ext_library = dlopen ("/ root/dynamik/libsysur.so", RTLD_LAZY);
if (! ext_library) {
// якщо помилка, вивести на екран
fprintf (stderr, "dlopen () error:% s n ", dlerror ());
return 1;
};
// завантажуємо з бібліотеки необхідну процедуру
powerfunc = dlsym (ext_library, argv [1]);// отримуємо адресу необхідної функції
// ext_library-адресу завантаженої бібл. p>// Argv-необхідна функція або змінна
printf ("Vvedite a11 a12:");
scanf ("% lf % Lf ", & a11, & a12);
printf ("Vve...