Символьное управление версиями и dlsym

70
8

Я загружаю библиотеку pthread в свою программу с помощью dlopen и извлекаю обработчики на pthread_create и pthread_join с помощью dlsym.


Как я могу гарантировать, что оба обработчика совместимы? Мне все равно, имеют ли символы новую версию или старые версии. Я просто хочу, чтобы любой pthread_create я использовал, чтобы хорошо работать с pthread_join, который я получаю.


Я знаю, что есть dlvsym, к которому я могу передать явный номер версии, но мне не нужны точные номера версий, так как я хочу, чтобы мой код не зависел от версий библиотеки.

спросил(а) 2011-04-08T00:12:00+04:00 9 лет, 5 месяцев назад
1
Решение
58

Единственная причина, по которой существует версия, заключается в плохой попытке ABI-совместимости с программами, составленными против древних версий glibc, которые в действительности не будут работать. (Они молча сломали ABI хотя бы один раз таким образом, что, насколько я могу судить, не могут быть совместимы.) Просто игнорируйте его.

ответил(а) 2011-04-08T02:04:00+04:00 9 лет, 5 месяцев назад
41

Похоже, вам нужно "dladdr - найти общий объект, содержащий заданный адрес".


Однако, поскольку вы не сказали, какую платформу используете, поэтому она может быть недоступна.

Посмотрите и посмотрите.

ответил(а) 2011-04-08T02:05:00+04:00 9 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема