[devel] Q: Переименование символов и сохранение ABI
Dmitry V. Levin
ldv на altlinux.org
Вс Июн 6 11:06:52 UTC 2010
On Sun, Jun 06, 2010 at 11:09:29AM +0400, Alexey I. Froloff wrote:
> Апстрим librep переименовал несколько символов не меняя SONAME.
> Хочется сохранить ABI. Раньше оно выглядело так:
>
> $ nm -D /usr/lib/librep.so.9.5.0 | grep file_uid
> 000168e0 T Ffile_uid_p
> 000547c8 B Qfile_uid_p
>
> Собсно, убрали "_p". Код раскрывается в следующее:
>
> repv Qfile_uid;
> repv Ffile_uid(repv arg) { ... }
>
> Делаю alias'ы:
>
> extern __typeof__ (Ffile_uid) Ffile_uid_p __attribute__ ((alias ("Ffile_uid")));
> extern __typeof__ (Qfile_uid) Qfile_uid_p __attribute__ ((alias ("Qfile_uid")));
>
>
> С функцией такой трюк проходит, а с common symbol нет:
>
> {standard input}:6039: Error: `Qfile_uid_p' can't be equated to common symbol 'Qfile_uid'
>
> У этой библиотеки полтора пользователя, но хотелось бы знать как
> в принципе решать подобные проблемы.
Достаточно превратить common symbol в (un)initialized data.
При этом конструкция вида "int i;" заменяется на "int i = 0;".
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20100606/a164bc90/attachment-0001.bin>
Подробная информация о списке рассылки Devel