标签: glibc

各种 Unice 上 fesetflushtozero() 的等效项

HP-UX 的 libc 具有fesetflushtozero在 \xe2\x80\x9c 渐进下溢\xe2\x80\x9d 和 \xe2\x80\x9cflush 到零\xe2\x80\x9d 之间切换浮点行为的功能。

\n\n

尽管梳理了几个 Unix libc(包括 glibc)的文档和手册页,我还没有找到如何在其他 Unices 中实现同样的事情。我对 Linux/glibc、Solaris 和 AIX 特别感兴趣。

\n

floating-point aix solaris glibc hp-ux

2
推荐指数
1
解决办法
194
查看次数

Glibc编译错误

我正在 Ubuntu 10.10(VirtualBox 中的 32 位)中编译 glibc-2.12.1。步骤如下:

  1. 配置 --prefix=/usr --disable-asm
  2. 制作

[我正在从一个新目录构建它]

我在运行 make 时遇到以下错误:

gcc ../sysdeps/i386/fpu/s_frexp.S -c -D__NO_MATH_INLINES -D__LIBC_INTERNAL_MATH_INLINES -I../include -I/home/l33thckr/Installations/glibc-build/math -I/home/l33thckr/Installations/glibc-build -I../sysdeps/i386/elf -I../nptl/sysdeps/unix/sysv/linux/i386/i686 -I../sysdeps/unix/sysv/linux/i386/i686 -I../nptl/sysdeps/unix/sysv/linux/i386 -I../sysdeps/unix/sysv/linux/i386 -I../nptl/sysdeps/unix/sysv/linux -I../nptl/sysdeps/pthread -I../sysdeps/pthread -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv/i386 -I../nptl/sysdeps/unix/sysv -I../sysdeps/unix/sysv -I../sysdeps/unix/i386 -I../nptl/sysdeps/unix -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/i386/i686/fpu -I../sysdeps/i386/i686/multiarch -I../nptl/sysdeps/i386/i686 -I../sysdeps/i386/i686 -I../sysdeps/i386/i486 -I../nptl/sysdeps/i386/i486 -I../sysdeps/i386/fpu -I../nptl/sysdeps/i386 -I../sysdeps/i386 -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -I../nptl  -I.. -I../libio -I.  -D_LIBC_REENTRANT -include ../include/libc-symbols.h  -DPIC -DSHARED     -DASSEMBLER  -DGAS_SYNTAX  -Wa,--noexecstack  -Wa,-mtune=i686 -o /home/l33thckr/Installations/glibc-build/math/s_frexp.os -MD -MP -MF /home/l33thckr/Installations/glibc-build/math/s_frexp.os.dt -MT /home/l33thckr/Installations/glibc-build/math/s_frexp.os …
Run Code Online (Sandbox Code Playgroud)

linux compiler-errors makefile compilation glibc

2
推荐指数
1
解决办法
2017
查看次数

如何单独构建ld.so?

我知道ld.so属于glibc,我想修改它的源代码并单独构建它。但是构建整个 glibc 太繁重了,而且 makefile 也太复杂了,我不知道从哪里开始挖掘。有小费吗?

linux glibc

2
推荐指数
1
解决办法
1086
查看次数

导入错误:/lib/libc.so.6:找不到版本“GLIBC_2.14”(/usr/lib/libpq.so.5 需要)

我必须使用 psycopg2 以 postgresql 作为后端在服务器上运行一个龙卷风 web 应用程序。我正在开发 Red Hat Enterprise Linux Server 版本 6.5。我设置了一个虚拟环境。现在,在这台服务器上,我没有 root 访问权限,无法使用 pip 或 yum,也无法从服务器复制文本(因此我无法发布确切的错误日志)。我一直在手动下载库的 tar 文件并安装它们。当我尝试运行 web 应用程序时,出现以下错误:

ImportError: /lib/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib/libpq.so.5)
Run Code Online (Sandbox Code Playgroud)

libc.so.6 的版本是 2.12。该错误显示在 psycopg2/ init.py中。

我很抱歉,这没什么可继续的,但服务器有很多限制。任何帮助将不胜感激。

postgresql glibc psycopg2 rhel libpq

2
推荐指数
1
解决办法
2万
查看次数

为什么 syslog 有两个不同的函数声明?

根据 Linux 手册页12,该函数syslog有两个不同的函数声明,如下所示:

int syslog(int type, char *bufp, int len);

void syslog(int priority, const char *format, ...);

但是,除了 C++,C 中没有函数重载。

如何解释事实?

c c++ linux overloading glibc

2
推荐指数
1
解决办法
74
查看次数

malloc.c 中的“bk”成员是什么缩写?

我的问题是关于 glibc。bk成员的名字是什么的缩写malloc_chunk

struct malloc_chunk {
  INTERNAL_SIZE_T      mchunk_prev_size;  /* Size of previous chunk (if free).  */
  INTERNAL_SIZE_T      mchunk_size;       /* Size in bytes, including overhead. */
  struct malloc_chunk* fd;         /* double links -- used only if free. */
  struct malloc_chunk* bk;
  /* Only used for large blocks: pointer to next larger size.  */
  struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
  struct malloc_chunk* bk_nextsize;
};
Run Code Online (Sandbox Code Playgroud)

参考:https : //code.woboq.org/userspace/glibc/malloc/malloc.c.html#malloc_chunk

c malloc glibc

2
推荐指数
1
解决办法
145
查看次数

为什么 linux nasm 即使没有 16 字节堆栈对齐也能工作

我尝试遵循https://cs.lmu.edu/~ray/notes/nasmtutorial/提供的一个非常简单的示例。我特意在下面一行注释,以确保堆栈没有按照 x64 调用约定的要求与 16 字节边界对齐。但仍然程序继续工作。请有人回答为什么不遵守调用约定,我期待某种分段错误。

;       sub     rsp, 8                  ; must align stack before call
Run Code Online (Sandbox Code Playgroud)

为了运行这个程序:(Ubuntu 20.04 lts,gcc 9.3.0)

nasm -felf64 echo.asm && gcc echo.o && ./a.out 123ABC
Run Code Online (Sandbox Code Playgroud)
; -----------------------------------------------------------------------------
; A 64-bit program that displays its command line arguments, one per line.
;
; On entry, rdi will contain argc and rsi will contain argv.
; -----------------------------------------------------------------------------

        global  main
        extern  puts
        section .text
main:
        push    rdi                     ; save registers that puts uses
        push    rsi
;       sub     rsp, …
Run Code Online (Sandbox Code Playgroud)

assembly glibc x86-64 nasm ubuntu-20.04

2
推荐指数
1
解决办法
136
查看次数

musl 的 GCC 包装器与 musl 的交叉编译器有何不同?

我正在尝试使用musl工具链编译各种程序,例如 MariaDB 。也就是说,我不希望在编译完成后对 glibc 或 GNU 的链接器有任何依赖。

到目前为止,我一直在使用 musl 的 GCC 包装器musl-gcc来编译东西。但是,对于像 MariaDB 这样的大型程序,我很难获得所有必要的库和标头,并且符号链接或添加编译环境变量并没有真正的帮助

我在这个 GitHub 存储库中看到提到构建一个针对 musl libc 的交叉编译器以及附加文档和代码。来自交叉编译器的文档:

这为您提供了一个完整的、可重定位的 musl 目标工具链,具有 C++ 支持和自己的库路径,您可以将第三方库安装到其中。

听起来这可以帮助我,但我不确定这与 musl 的 GCC 包装器有什么不同,据我所知,它只是改变了 GCC 寻找库和头文件等的位置。

最终,我不确定这个交叉编译器与 GCC 包装器到底有多大不同,以及它对我的情况是否有用。当我可以符号链接到现有库并使用 GCC 包装器时,为什么我需要自己的库路径来安装第三方库?交叉编译器是我应该编译的方式吗,尤其是更大的代码库?

c c++ gcc glibc musl

2
推荐指数
1
解决办法
5457
查看次数

为什么 glibc memcpy 不选择 avx512 版本?

我编译了以下示例代码:

 #cat array_addition.c 
 #define MAX 1000000
 #define S 1024
 #include <string.h>
int a[S], b[S], c[S];

__attribute__((target_clones("avx512f", "avx2","arch=atom","default")))
void foo(int argc){
    int i,x;

for (x=0; x<1024; x++){
    for (i=0; i<S; i++){
        a[i] = b[i] + c[i];
    }
}
    b[0] = argc;
    memcpy(&a[0], &b[0], argc *sizeof(int));
}
int main(int argc, char** argv) {
    foo(argc);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

其中调用 memcpy;

从 objdump 中,我们可以发现它会调用 GLIBC memcpy:

#readelf -r a.out 

Relocation section '.rela.dyn' at offset 0x418 contains 1 entry:
  Offset          Info           Type           Sym. Value    Sym. …
Run Code Online (Sandbox Code Playgroud)

c glibc compiler-optimization avx512

2
推荐指数
1
解决办法
325
查看次数

为什么 GCC 需要“-lpthread”来链接 pthread 函数,但不需要参数来链接其他函数?

如果我使用 pthread 函数,我必须在 GCC 上使用“-lpthread”参数以确保正确链接。但是,为什么 GCC 在链接其他标准函数时不需要额外的参数?示例:printf、scanf、POSIX 套接字等。

gcc glibc pthreads linker-errors

2
推荐指数
1
解决办法
572
查看次数