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