草庐IT

linux - 针对特定的 glibc ABI

我想在Linux上编译一个动态链接的可执行文件,我想以较旧的glibcABI为目标,以确保它可以在尽可能多的linux计算机上运行。我知道对此的典型解决方案是使用chroot或虚拟机,安装旧工具链,并让工具链自然地针对旧glibcABI,但我想知道是否有办法明确告诉编译器“嘿,我希望您依赖版本GLIBCXX_3.4.11”。谢谢! 最佳答案 Hey,IwantyoutodependonversionGLIBCXX_3.4.11请注意,GLIBCXX是关于libstdc++的,不是glibc。当您将程序链接到libstdc++.so并

c - Glibc 和 uClibc 并排在一个系统上

是否可以让基于glibc和uClibc的应用程序在一个系统上并行运行?背景:我们有基于gcc的二进制交叉编译器配置为与uClibc链接。我们已经用它交叉编译了glibc。现在我们要构建一些应用程序,以便它们将与glibc而不是uClibc链接。我们不想重建编译器。 最佳答案 glibc和uClibc并存,一些程序链接到一个,而其他程序链接到另一个,这没有问题。但是,附加库存在问题。您系统上的每个共享库都将针对glibc或uClibc(使用相应的header,为标准库函数定义不同的ABI)构建,因此例如,如果glibc程序和uClib

c - Glibc 和 uClibc 并排在一个系统上

是否可以让基于glibc和uClibc的应用程序在一个系统上并行运行?背景:我们有基于gcc的二进制交叉编译器配置为与uClibc链接。我们已经用它交叉编译了glibc。现在我们要构建一些应用程序,以便它们将与glibc而不是uClibc链接。我们不想重建编译器。 最佳答案 glibc和uClibc并存,一些程序链接到一个,而其他程序链接到另一个,这没有问题。但是,附加库存在问题。您系统上的每个共享库都将针对glibc或uClibc(使用相应的header,为标准库函数定义不同的ABI)构建,因此例如,如果glibc程序和uClib

linux - lfs 7.2 编译 glibc 2.16.0

我正在按照lfs中的步骤制作一个linux系统。但是当我在thispage,上执行第五步(即make之前的步骤)时我最后得到一个错误。configure:error:linkerwith-zrelrosupportrequired现在如果我调用make我得到一个错误make:***Notargetsspecifiedandnomakefilefound.Stop.我在ubuntu12.04机器上运行它。如何修复此错误? 最佳答案 执行以下操作:-sudoapt-getinstallgawk然后重试。这对我有用。

linux - lfs 7.2 编译 glibc 2.16.0

我正在按照lfs中的步骤制作一个linux系统。但是当我在thispage,上执行第五步(即make之前的步骤)时我最后得到一个错误。configure:error:linkerwith-zrelrosupportrequired现在如果我调用make我得到一个错误make:***Notargetsspecifiedandnomakefilefound.Stop.我在ubuntu12.04机器上运行它。如何修复此错误? 最佳答案 执行以下操作:-sudoapt-getinstallgawk然后重试。这对我有用。

c - 如何链接 glibc 的 iconv 实现?

GNUC库提供了iconv的实现——我该如何使用它?简单程序:#includeintmain(intargc,char**argv){iconv_tcd=iconv_open("UTF-8","ISO-8859-1");iconv_close(cd);return0;}编译链接:$gcc-Walliconv.c-oiconv/tmp/ccKAfXNg.o:Infunction`main':iconv.c:(.text+0x19):undefinedreferenceto`libiconv_open'iconv.c:(.text+0x29):undefinedreferenceto`li

c - 如何链接 glibc 的 iconv 实现?

GNUC库提供了iconv的实现——我该如何使用它?简单程序:#includeintmain(intargc,char**argv){iconv_tcd=iconv_open("UTF-8","ISO-8859-1");iconv_close(cd);return0;}编译链接:$gcc-Walliconv.c-oiconv/tmp/ccKAfXNg.o:Infunction`main':iconv.c:(.text+0x19):undefinedreferenceto`libiconv_open'iconv.c:(.text+0x29):undefinedreferenceto`li

我可以修改动态链接器并在不重新编译 glibc 的情况下使用吗?

我正在尝试在64位Ubuntu机器上修改libc6(2.15-0ubuntu20.2)中提供的动态链接器。所以目前我的代码使用相同版本的glibc库。(我已经下载了相同的源代码并正在处理它)。我的问题是,是否可以仅修改和构建glibc\elf\目录中的链接器源代码,而无需构建整个glibc库。如果可能的话,我怎样才能让我的测试程序使用我自己构建的新版本动态链接器而不是使用默认的未修改链接器来切换。非常感谢任何指示或建议。(如果需要更多信息,请告诉我)编辑::@constantius我按照您链接的帖子中的步骤构建了ld.so。但是我在make上遇到了以下错误,我检查了ld.so在小Spr

我可以修改动态链接器并在不重新编译 glibc 的情况下使用吗?

我正在尝试在64位Ubuntu机器上修改libc6(2.15-0ubuntu20.2)中提供的动态链接器。所以目前我的代码使用相同版本的glibc库。(我已经下载了相同的源代码并正在处理它)。我的问题是,是否可以仅修改和构建glibc\elf\目录中的链接器源代码,而无需构建整个glibc库。如果可能的话,我怎样才能让我的测试程序使用我自己构建的新版本动态链接器而不是使用默认的未修改链接器来切换。非常感谢任何指示或建议。(如果需要更多信息,请告诉我)编辑::@constantius我按照您链接的帖子中的步骤构建了ld.so。但是我在make上遇到了以下错误,我检查了ld.so在小Spr

linux - 了解 glibc malloc 修剪

我目前正在处理的一些程序消耗的内存比我认为的要多得多。所以我想了解glibcmalloc修剪是如何工作的。我写了以下测试:#include#include#defineNUM_CHUNKS1000000#defineCHUNCK_SIZE100intmain(){//disablefastbinsmallopt(M_MXFAST,0);void**array=(void**)malloc(sizeof(void*)*NUM_CHUNKS);//allocatingmemoryfor(unsignedinti=0;i测试输出(不调用malloc_trim):Arena0:systemby