Кажется, что glibc 2.14 представил новую версию memcpy
(для исправления bug 12518). Затем программы, скомпилированные против glibc 2.14+, будут содержать динамическую ссылку на [email protected]_2.14
, которая явно недоступна в старых версиях glibc.Как создать обратную динамическую связь?
Однако glibc 2.14+ явно содержит старый символ [email protected]_2.2.5
для обратной совместимости. Я хотел бы иметь возможность компилировать несколько программ таким образом, чтобы они были совместимы с двоичными файлами с более старыми версиями glibc. Как сделать компиляцию программы в системе с glibc 2.14+, чтобы она использовала эту старую версию символа? Если процедура обязательно специфична для компилятора, я использую GCC (но было бы неплохо узнать, как это сделать и для других компиляторов).
(На стороне примечания, я должен признать, что не знаю много о версированных символах, например, как их создавать и как их использовать, или они являются специфичными для ELF или должны рассматриваться как стандартная часть из современных ABI, и мне не удалось найти документацию об этом. Имеются ли хорошие источники информации по этому вопросу?)
Это единственный способ сделать это? Было бы неплохо не изменять исходный код, чтобы изменить привязку. Невозможно ли сообщить компоновщику выбрать версию символа при создании окончательного исполняемого файла, а не делать это на уровне исходного кода? – Dolda2000
Спасибо за ссылку, кстати! – Dolda2000
Это способ сделать это вручную, на уровне контроля версий символов, и это то, о чем я думал, что вам нужно. Более простой способ - установить устаревшую установку программного обеспечения со старыми файлами .a/.so/.h и компиляции/ссылки на них. – fche