重写共享库中的glibc函数以在交叉编译中降级glibc所需版本 我在源代码中有C++第三方库。它是独立的,不引用任何其他库。它使用C++14,因此需要一个现代的gcc编译器

重写共享库中的glibc函数以在交叉编译中降级glibc所需版本 我在源代码中有C++第三方库。它是独立的,不引用任何其他库。它使用C++14,因此需要一个现代的gcc编译器,c++,gcc,build,glibc,ldd,C++,Gcc,Build,Glibc,Ldd,我想在一个为RHEL5编译的软件应用程序中使用它的一些功能,它是一个旧版本的GCC,它不理解现代C++。 为了解决这个问题,我使用GCC7.2创建了一个共享库(.so),它公开了一个简单的C api。我希望so文件是自包含的,因此我使用链接行: g++-shared-static libstdc++-static libgcc 我没有使用选项-static,因为我无法让它工作,尽管我在生成对象文件时使用了-fPIC。可能是因为libstdc++的静态库可能在编译时没有fPIC。因此ldd表明my

我想在一个为RHEL5编译的软件应用程序中使用它的一些功能,它是一个旧版本的GCC,它不理解现代C++。 为了解决这个问题,我使用GCC7.2创建了一个共享库(.so),它公开了一个简单的C api。我希望
so
文件是自包含的,因此我使用链接行:

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

我没有使用选项
-static
,因为我无法让它工作,尽管我在生成对象文件时使用了
-fPIC
。可能是因为
libstdc++
的静态库可能在编译时没有
fPIC
。因此
ldd
表明my
So
libc
libm
有一些依赖性
objectdump-T
显示,这些依赖项中的大多数都与RHEL5兼容,因为它们需要早于2.5版本的
GLIBC
。但是有一个依赖于
memcpy
,需要
GLIBC
2.14。这不是直接来自我的源代码,而是可能来自静态链接的
libstdc++
libgcc


有没有办法我可以提供自己的
memcpy
实现,并告诉链接器在任何地方都使用它,而不是从
glibc
中的实现?

尝试搜索“gcc mocking call”,比如在这里找到一些好的建议。我需要注意的是,在2.14中,memcpy变成了GNU_IFUNC函数,因此我的本地副本需要具有一致的类型,否则我可能会遇到libstdc++和libgcc的问题。