Articles of glibc

LINUX / glibc的。 我可以在信号处理程序中使用fprintf吗?

我可以在glibc / linux的信号(SIGALRM)处理程序中使用fprintf(stderr)吗?

在Linux中启动默认堆大小?

ulimit -s显示了默认的堆栈大小限制 。 有没有启动默认堆大小?

如何从C中做相当于“ulimit -n 400”?

我必须运行命令“ulimit -n 400”来提高允许的打开文件的数量,然后才能启动用C语言编写的程序,但是有没有办法在C程序中执行相同的操作? 也就是说,增加该进程允许的打开文件描述符的数量。 (我对每个线程的限制都不感兴趣。) 它会涉及设置ulimits,然后分配一个孩子,将被允许有更多的开放文件? 当然,我可以编写一个运行ulimit的shell包装器,然后启动我的C程序,但是感觉不那么优雅。 我也可以grep通过bash或sh的源代码,看看它是如何完成的 – 也许我会,如果我在这里得不到答案。 还有相关的,如果你想select很多的文件描述符, 看这里 。

执行ELF IFUNC调度function时读取环境

(至less)Linux上最近的ELF工具中的IFUNC机制允许在运行时select一个函数的实现。 查看GCC文档中的iunc属性以获得更详细的描述: http ://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html IFUNC机制的另一种描述: http ://www.agner.org/optimize /blog/read.php?i=167 我想根据环境variables的值select我的实现。 但是,我的实验告诉我,parsing器函数运行时,libc(至less是关于环境的部分)还没有被初始化。 所以,经典接口(extern char ** environ或getenv())不起作用。 有没有人知道如何在Linux的早期阶段访问一个程序的环境? 内核在execve(2)系统调用时设置环境,所以在早期初始化时,它已经在程序地址空间中的某个地方(但确切地说?)。 在此先感谢文森特 程序testing: #include <stdio.h> #include <stdlib.h> extern char** environ; char** save_environ; char* toto; int saved=0; extern int fonction (); int fonction1 () { return 1; } int fonction2 () { return 2; } static typeof(fonction) * resolve_fonction (void) { […]

Glibc-2.22使(循环)错误

这个错误出现,当我尝试编译glibc包在第6.9章 – 从头开始​​从7.8的Linux通过。 当make运行时,进入一个无限循环,重复以下步骤: /usr/bin/install -c -m 644 ../include/limits.h /usr/include/limits.h gawk -f ../scripts/gen-as-const.awk ../sysdeps/x86_64/locale-defines.sym \ | gcc -S -o /sources/glibc-2.22/build/locale-defines.hT3 -std=gnu99 -fgnu89-inline -O2 -Wall -Werror -Wno-error=undef -Wundef -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes -ftls-model=initial-exec -I../include -I/sources/glibc-2.22/build/string -I/sources/glibc-2.22/build -I../sysdeps/unix/sysv/linux/x86_64/64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/x86_64/nptl -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/x86_64/64 -I../sysdeps/x86_64/fpu/multiarch -I../sysdeps/x86_64/fpu -I../sysdeps/x86/fpu/include […]

在libc.so和ld-linux.so中有重复的内存pipe理符号

一些序言 看来malloc,calloc,realloc和free都是在ld-linux.so和libc.so复制的。 据我所知,这是由dynamic加载器来完成的,在ld-linux.so内部pipe理内存pipe理,然后加载libc.so ,并使其内存pipe理function变得可靠。 不过,我对这些重复的符号有一些疑问: 这里有一个非常简单的C程序调用malloc并退出: #include <stdlib.h> int main() { void *p = malloc(8); return 0; } 我使用gcc在x86_64 linux框中进行编译,并使用gdb进行一些debugging: $ gcc -g -o main main.c $ gdb ./main (gdb) start Temporary breakpoint 1 at 0x4004f8 Starting program: main Temporary breakpoint 1, 0x00000000004004f8 in main () (gdb) info symbol malloc malloc in section .text of […]

为什么-O去gcc导致“stat”解决?

试图做一个search,但没有发现任何东西。 每当我尝试编译一个共享对象和链接到它的testing二进制文件,我得到这个错误: [root@hypervisor test-files]# ./test ./test: symbol lookup error: ./test-files.so: undefined symbol: stat [root@hypervisor test-files]# 玩了之后,我发现,如果我在编译过程中将-O给gcc,stat()开始按预期工作。 我一直没能在网上find任何迹象,说明为什么-O的所有东西都会修复一个未定义符号的问题(或者它只是掩盖了一个错误而不是修复它?)。

使用更新版本的glibc时出错

我试图在linux服务器上安装tensorflow,我只是一个没有root权限的用户。 而我不能通过跳转服务器ssh到它传输文件。 系统如下: Linux THENAME_OF_SURVER 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 我通过pip install tensorflow ,一个tensorflow程序将显示以下内容: ImportError: /lib64/libc.so.6: version `GLIBC_2.16' not found 我安装了一个新版本的glibc git clone git://sourceware.org/git/glibc.git cd glibc git checkout –track -b local_glibc-2.16 origin/release/2.16/master mkdir build cd build ../configure –prefix=/home/MYNAME/dependency/glibc-2.16 make -j4 make install 遵循在线说明,我通过以下方式更改了环境variables: export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib 但是这导致了我一个问题:我不能使用任何命令。 例如,我给ls打电话,它会提醒我这样的: […]

用非主libc编译(eglibc,uClibc)

我正在embedded式环境中工作。 我有一个交叉编译器的ARM架构与eglibc因为它的主要库(即与工具链一起默认的libc )。 现在我想要一些应用程序与uClibc链接。 所以我用这个工具链编译了uClibc 。 现在尝试编译和链接与uClibc的应用程序,有一个错误。 它正在链接到工具链的默认库。 我认为它可能在同一台机器上有两个不同的libcs​​(例如,libc,uClibc)。 我在网上search和以下 单个主机上有多个glibc库 正如它所build议的,我做了以下事情 $arm-unknown-linux-gnueabi-gcc -c test.c -o TEST $arm-linux-gnueabi-gcc TEST -o dynamic_test_with_new_opts -Wl,rpath=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib -Wl,-dynamic-linker=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib/ld-uClibc.so.0 在这种情况下,它与eglibc的默认libc.so.6 eglibc 如何链接到不同的libc文件? 正如上面的链接build议,我甚至尝试了以下几点: $arm-unknown-linux-gnueabi-gcc -Xlinker -rpath=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib -Xlinker -I/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib/ld-uClibc-0.9.32.1.so test.c -o dynamic_test_with_linker_options 在这种情况下,它也被链接到eglibc的默认libc.so.6 我哪里错了? 我真的被困在这。 有人可以摆脱一些光?

gcc和glibc版本

我已经安装了gcc 4.1.2。 我在CentOS上使用yum来安装一个新的独立gcc(版本4.4.6)。 现在我的问题是,这两个gcc版本使用相同的glibc版本或glibc是不同的两个? 我怎样才能find? 其次,在性能方面有更好的glibc版本会更好吗?