Переопределение функции 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
?