У меня есть файл с именем Point.c, который имеет структуру, определенную названы:Динамическая загрузка размер структуры в C
Point
Кроме того, он имеет функции в нем названы point_str, point_deserialize.
Теперь есть подобные файлы, как это нравится
LinkedList.c, Node.c etc with similar definitions.
Теперь я называю эти функции динамически в другом файле с помощью dlopen.
Так что, если я считаю, что тип точки, я создам строку:
point_str
и вызвать функцию, давая путь к файлу .so с помощью dlopen.
Но, я не могу знать размер структуры динамически. Есть ли способ сделать это? Я хочу сделать что-то вроде
int size = givemesize("Point", "path_to_so");
Это похоже на dlopen, но для того, чтобы знать размер структуры.
Редактировать: почему я хочу знать размер?
С такими размерами я десериализую что-нибудь от строки до ее фактического типа. Вот почему мне нужен размер. Таким образом, из командной строки происходит десериализация объекта Point. Итак, с этой строкой я хочу знать фактический размер объекта Point, который находится в Point.c, и имеет libpoint.so
Не является ли структурой, определенной в файле заголовка? –
Если нет заголовка, который определяет структуру, то интерфейс в библиотеке должен предоставить функцию (или, возможно, погибшую от мысли, глобальную переменную), к которой вы можете получить доступ через 'dlsym()' для получения значения. Или, что более вероятно, он предоставляет некоторые API-интерфейсы для распределения пространства для вашей структуры. Без поддержки библиотеки (в виде заголовка или информации о времени выполнения) вам нужно будет написать код, слабо эквивалентный отладчику, чтобы получить информацию - если библиотека скомпилирована с имеющимися отладочными символами/информацией. –
Спасибо за ответ, нет в одном файле. Если я определяю его в файле заголовка, предположим, что Point.h, как это решить проблему? – Rishi