Переопределение функции glibc в разделяемой библиотеке для понижения версии glibc, необходимой для кросс-компиляции

У меня есть сторонняя библиотека C++ в исходном коде. Он автономен и не относится к какой-либо другой библиотеке. Он использует C++14, следовательно, он требует современного компилятора gcc.

Я хочу использовать некоторые из его функций в программном приложении, скомпилированном для RHEL5 со старой версией gcc, которая не понимает современный C++.

Чтобы решить эту проблему, я создаю с помощью gcc 7.2 разделяемую библиотеку (.so), которая предоставляет простой и простой C api. Я хотел бы so файл должен быть автономным, поэтому я использую строку ссылки:

g++ -shared -static-libstdc++ -static-libgcc

Я не пользуюсь опцией -static, так как я не мог заставить его работать, несмотря на то, что я использовал -fPIC при создании моих объектных файлов. Вероятно, потому что статические библиотеки для libstdc++ может быть скомпилирован без fPIC, Так ldd показывает, что мой so имеет некоторые зависимости от libc а также libm, objectdump -T показывает, что большинство этих зависимостей совместимы с RHEL5, потому что они требуют версии GLIBC старше 2,5 лет. Однако есть одна зависимость от memcpy что требует GLIBC 2,14. Это не напрямую из моего исходного кода, но, вероятно, из libstdc++ или же libgcc, которые статически связаны.

Могу ли я предоставить свою собственную реализацию memcpy и скажите компоновщику использовать его везде, а не из glibc?

0 ответов

Другие вопросы по тегам