Как я могу избежать зависимости от GLIBC_X.Y при использовании слабых символов - PullRequest
2 голосов
/ 26 мая 2011

Работая над реализацией сигнала в Херд, я столкнулся со следующей проблемой.

По сути, я добавляю новую функцию в 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 Ответ

0 голосов
/ 26 мая 2011

Так что я использовал слабый псевдоним для реализации по умолчанию вместо просто слабого символа по сравнению с NULL, и почему-то получается версия символа не извлекается из glibc во время соединения.

...