Хорошо, поэтому я хочу установить ссылку на более низкую версию libc/glibc для совместимости. Я заметил это ответ на вопрос о том, как это сделать, на случай к случаю основе:Укажите, какая версия символов доступна для ссылки (в libc)?
How can I link to a specific glibc version? https://stackoverflow.com/a/2858996/920545
Однако, когда я попытался применить это сам, я столкнулся с проблемами, потому что я не могу выясните, какой младший номер версии я должен использовать для ссылки. Используя пример в ответе, если я использую «nm» для проверки символов, предоставленных моим /lib/libc.so.6 (который, в моем случае, является ссылкой на libc-2.17.so), я вижу, что это кажется, для обеспечения версии 2.0 и 2.3 Realpath:
> nm /lib/libc.so.6 | grep [email protected]
4878d610 T [email protected]@GLIBC_2.3
48885c20 T [email protected]_2.0
Однако, если я пытаюсь связать против [email protected]_2.0:
__asm__(".symver realpath,[email protected]_2.0");
... я получаю сообщение об ошибке:
> gcc -o test_glibc test_glibc.c
/tmp/ccMfnLmS.o: In function `main':
test_glibc.c:(.text+0x25): undefined reference to `[email protected]_2.0'
collect2: error: ld returned 1 exit status
Однако, используя [email protected]_2.3 работает ... и код из примера , [email protected]_2.2.5 работает - хотя, по данным nm, такой символ не существует. (FYI, если я компилирую без инструкции __asm__
, а затем проверяю на nm, я вижу, что она связана с [email protected]_2.3, что имеет смысл, и я подтвердил, что ссылка на [email protected]_2.2.5 работает.)
Итак, мой вопрос: насколько я знаю, с какой версией различных функций я могу связать? Или даже которые доступны? Есть ли какие-то другие кварты, которые я должен кормить до нм? Я проверяю неправильную библиотеку?
Спасибо!
* facepalm * Yup, вы правы ... Я действительно смотрел на/lib/вместо/lib64/binary. Спасибо, что указали на очевидное! –