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