Факультет О Естественнонаучный
шифр Наименование
Информационные системы и программная
Кафедра О7 инженерия
шифр Наименование
Дисциплина Компьютерный практикум
Лабораторная работа № 3
на тему:
«Создание динамических библиотек при помощи набора компиляторов
и утилит GCC и их применение»
Вариант 7
ПРЕПОДАВАТЕЛЬ
Садырова А. К.
Фамилия И.О. Подпись
Оценка
«_____» 2022 г.
Санкт-Петербург
2022 г.
Задание к лабораторной работе
1. Написать программу в соответствии с вариантом.
#ifdef WIN32
#include <windows.h>
#elif __linux
#include <dlfcn.h>
#endif
int main()
{
int array[64];
void * lib;
do
{
printf("\nChoose the struct for work:\n"
"1. Work with matrix.\n"
"2. Work with array.\n"
"3. Exit.\n");
scanf("%d", &choose);
switch(choose){
case 1:{
#ifdef WIN32
lib = LoadLibrary("libMatrix.dll");
if(!lib)
{
printf("Cant open library libMatrix.dll\n");
}
matrix_test(lib);
FreeLibrary(lib);
#endif
#ifdef __linux
lib = dlopen("libMatrix.so", RTLD_LAZY);
if(!lib)
{
printf("Cant open library libMatrix.so\n");
}
matrix_test(lib);
dlclose(lib);
#endif
} break;
case 2:
{
lib = LoadLibrary("libArray.dll");
if(!lib)
{
printf("Cant open library libArray.dll\n");
}
array_test(lib);
FreeLibrary(lib);
} break;
case 3: breakpoint = 0; break;
}
} while(breakpoint);
return 0;
}
funcMatrix funCreateM;
funcMatrix funPrintM;
funcMatrix funChangeM;
#ifdef WIN32
funCreateM = (funcMatrix)GetProcAddress((HINSTANCE)lib,
"CreateMatrix");
if(funCreateM == NULL)
{
printf("Cant load function CreateMatrix");
}
funCreateM(matrix);
printf("\n\nCreated matrix:\n");
funChangeM = (funcMatrix)GetProcAddress((HINSTANCE)lib,
"ChangeMatrix");
if(funChangeM == NULL)
{
printf("Cant load function ChangeMatrix");
}
funChangeM(matrix);
#endif
#ifdef __linux
funCreateM = (funcMatrix)dlsym(lib, "CreateMatrix");
if(funCreateM == NULL)
{
printf("Cant load function CreateMatrix");
}
funCreateM(matrix);
printf("\n\nGenerated matrix:\n");
#ifdef WIN32
funCreateA = (funcArray)GetProcAddress((HINSTANCE)lib, "CreateArray");
if(funCreateA == NULL)
{
printf("Cant load function GenArray");
}
funCreateA(array);
printf("\n\nCreated array:\n");
funPrintA = (funcArray)GetProcAddress((HINSTANCE)lib, "PrintArray");
if(funPrintA == NULL)
{
printf("Cant load function PrintArray");
}
funPrintA(array);
#ifdef __linux
funCreateA = (funcArray)dlsym(lib, "CreateArray");
if(funCreateA == NULL)
{
printf("Cant load function CreateArray");
}
funCreateA(array);
printf("\n\nCreated array:\n");
funPrintA = (funcArray)dlsym(lib, "PrintArray");
if(funPrintA == NULL)
{
printf("Cant load function PrintArray");
}
funPrintA(matrix);
funChangeA = (funcArray)dlsym(lib, "ChangeArray");
if(funChangeA == NULL)
{
printf("Cant load function ChangeArray");
}
funChangeA(array);
#endif
}
Компиляция программы
Рисунок 2 – Меню