Как я могу избежать зависимости от GLIBC_X.Y при использовании слабых символов
Работая над реализацией сигнала в Херд, я столкнулся со следующей проблемой.
По сути, я добавляю новую функцию в glibc, которая используется libpthread (они взяты из отдельных источников в Hurd). Чтобы новая библиотека libpthread работала со старыми glibc, я объявляю новую функцию слабым символом в коде libpthread. (Смотрите патч здесь.)
Когда libpthread собран с более старым glibc, все работает с отступом. Однако, когда символ фактически обнаруживается в glibc во время сборки, компоновщик выдает "VERNEED", соответствующий версии нового символа и работающий со старым glibc, приводит к:
foo: ./libc.so.0.3: version `GLIBC_X.Y' not found
(required by /lib/libpthread.so.0.3)
где GLIBC_X.Y - версия для вновь введенного символа.
В результате я ищу, что новый символ будет NULL, когда glibc его не имеет, что и происходит, когда я собираю libpthread со старым glibc.
Есть идеи, как это исправить? Могу ли я запретить версионирование для своего символа при связывании libpthread?
1 ответ
Поэтому я использовал слабый псевдоним для реализации по умолчанию вместо просто слабого символа по сравнению с NULL
и по какой-то причине оказывается, что версия символа не извлекается из glibc во время ссылки.