Проверьте свои знания. Отметьте верные высказывания.
- Для сборки динамической библиотеки gcc требуется указать опцию
--shared
- GNU make может использоваться только для сборки программ на С/С++
- Для вывода символических имен объектного(бинарного) файла используется
nm
с++filt
используется для восстановления исходного имени функций (Demangle)- на языках на C++ и Java
- Для вывода символических имен объектного(бинарного) файла используется
stat
- В основе работы make лежит информация о зависимостях частей проекта
Найдите соответствие между прототипами функций С++ и их закодированными именами
Закодированные имена | Функция |
---|---|
_Z8getValuei | getValue(int) |
_Z8getValuePFviE | getValue(void (*)(int)) |
_Z8getValuePvi | getValue(void*, int) |
_Z8getValuev | getValue() |
В этом задании Вам необходимо создать разделяемую динамическую библиотеку libsolution.so
в которой реализовать функцию со следующим прототипом:
int stringStat(const char *string, size_t multiplier, int *count);
Функция возвращает значение длины строки string
, умноженное на multiplier
, и увеличивает на 1
значение, на которое указывает count
.
Представление решения
Решение предоставляется в виде двух файлов solution.c и Makefile, в последнем предполагается цель по умолчанию, которая приводит к сборке Вашей библиотеки.
Вывод
Программа (функция в библиотеке) ничего не выводит на консоль
solution.c
#include <string.h>
int stringStat(const char *string, size_t multiplier, int *count) {
*count = *count + 1;
return (int) (strlen(string) * multiplier);
}
Makefile
all: solution.c
gcc --shared -fPIC -o libsolution.so solution.c