Как я могу избежать зависимости от 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 во время ссылки.

Другие вопросы по тегам