Работая над реализацией сигнала в Херд, я столкнулся со следующей проблемой.
По сути, я добавляю новую функцию в 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?