URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5326
[ Назад ]

Исходное сообщение
"Как выполнить код при запуске библиотеки?"

Отправлено Hordi , 10-Апр-06 16:40 
Хотелось бы сделать так, как сделано в libc.so, т.е. при запуске файла вывести версию или что-либо еще. Ткните где искать.

Содержание

Сообщения в этом обсуждении
"Как выполнить код при запуске библиотеки?"
Отправлено michelnok , 10-Апр-06 17:35 
__attribute__((constructor))?

"Как выполнить код при запуске библиотеки?"
Отправлено horsh , 10-Апр-06 18:28 
>Хотелось бы сделать так, как сделано в libc.so, т.е. при запуске файла
>вывести версию или что-либо еще. Ткните где искать.

#pragma init
дока тут: http://docs.sun.com/app/docs/doc/805-4955/6j4mg806k?a=view


"Как выполнить код при запуске библиотеки?"
Отправлено Hordi , 11-Апр-06 17:02 
Я, похоже, непонятно объяснил, что мне нужно... Нужна stub-заглушка, которая при тупом запуске на выполнение (не загрузка программой) выдавала внутри зашитую врсию библиотеки.

"Как выполнить код при запуске библиотеки?"
Отправлено michelnok , 11-Апр-06 21:16 
>Я, похоже, непонятно объяснил, что мне нужно... Нужна stub-заглушка, которая при тупом
>запуске на выполнение (не загрузка программой) выдавала внутри зашитую врсию библиотеки.

"Доктор, почему меня все игнорируют?" :)

void __attribute__((constructor)) my_stub(void)
{
printf("My version is %d.%d\n",version_major,version_minor);
}


"Как выполнить код при запуске библиотеки?"
Отправлено Hordi , 11-Апр-06 22:16 
>"Доктор, почему меня все игнорируют?" :)
Так не работает... Компилирует нормально, в конечный файл включает, но результат нулевой. Или специально куда совать нужно? Подробнее плз.

"Как выполнить код при запуске библиотеки?"
Отправлено michelnok , 11-Апр-06 22:35 
>Так не работает... Компилирует нормально, в конечный файл включает,
>но результат нулевой. Или специально куда совать нужно? Подробнее плз.

Честно? Я не пробовал :)
Но должно работать. Возможно я ошибся с указанием места, где надо писать __attribute__, но это вроде как штатный для GCC способ. Погугли насчет примеров.


"Как выполнить код при запуске библиотеки?"
Отправлено Hordi , 12-Апр-06 10:06 
Посмотрел __attribute__(constructor,destructor),- не то. Это должно сработать если делать dlopen-dlclose.



"Как выполнить код при запуске библиотеки?"
Отправлено SIO , 11-Апр-06 15:46 
Если не ошибаюсь, то это делается путем указания линкеру при линковке библиотеки точки входа (опция -е).