libc相关内容

什么是“命名空间清洁度",glibc如何实现?

我最近从 @zwol的答案中发现了这一段: read上的__libc_前缀是因为在C库中,实际上read有三个不同的名称:read,__read和__libc_read.这是一种实现“命名空间整洁"的技巧,如果您打算实施完全成熟且完全符合标准的C库,则只需担心.简短的版本是C库中有许多需要调用read的函数,但是其中一些不能使用 name read来调用它,因为技术上允许使用C程序定义一个名 ..
发布时间:2020-04-27 04:42:06 其他开发

为什么fseek使用read()系统调用?

我试图了解fseek的glibc实现.为此,我下载了glibc源代码并尝试了解其功能执行顺序. 我在libio/fseek.c中找到了fseek实现.基本上,它使用相同的参数调用函数(或宏)_IO_fseek().此宏在libio/iolibio.h中实现. 它定义为_IO_seekoff_unlocked (__fp, __offset, __whence, _IOS_INPUT|_ ..
发布时间:2020-04-23 11:19:03 服务器开发

在Linux上以原子方式交换两个文件的内容

我有两个文件A和B,每个文件都有自己的内容. 我想交换这两个文件,所以A会变成B,而B会变成A.但是我想做一个保证,没有其他进程会发现这两个文件处于不一致状态,也没有任何进程会发现其中的任何文件丢失,即使是很短的时间.因此,作为附带的操作,我还要保证,如果在操作过程中发生任何错误,则什么都不会改变(我想这就像一笔交易). 在OS X上有一个exchangedata()函数,所以我想我正 ..
发布时间:2020-04-23 10:51:54 服务器开发

静态链接系统库,libc,pthreads,以帮助调试

我试图避免在这个Stackoverflow条目中描述的情况:调试客户框中生成的核心文件。如果我静态编译所有库,我将避免在核心转储时总是收集共享库吗?我基本上希望处于一种情况,我可以用gdb加载核心文件并检查崩溃的应用程序。 如果我失败了,应该注意什么静态链接我们需要的所有库的路线。我认为glib和pthreads可能会造成最大的问题。 Valgrind会不再有用吗?如果我将Valgri ..
发布时间:2018-04-21 15:00:40 服务器开发

GDB调试警告

当我尝试通过gdb或者直接从终端调试我的核心转储时,它会给我提供如下的警告。因此,我的回溯工作不正常。 警告:无法找到匹配劣质线程库的libthread_db,线程调试将不可用。 警告:无法找到匹配劣质线程库的libthread_db,线程调试将不可用。 $ b 警告:无法加载共享库符号)。 您是否需要“set solib-search-path”或“set sysroot”? ..
发布时间:2018-04-21 14:57:01 其他开发

如何使用libc的调试版本

如何让gdb使用libc的调试符号? 更长的版本: 我正在使用gdb调试程序,我想查看libc使用的futex的信息。然而,在调试过程中的某个时刻,我得到的输出如下: Catchpoint 2(调用syscall futex),0x00007ffff772b73e ()from /lib/libc.so.6 (gdb)bt #0 0x00007ffff772b73e in ?? ..
发布时间:2018-04-21 14:14:40 服务器开发

需要GLibc优化

为什么不可能重新编译GLibc关闭所有的优化(即-O0)? 特别是在这样做: make CFLAGS =' - O0 -w'CXXFLAGS =' - O0 -w' 我得到: #error“glibc无法编译而没有优化” 解决方案 如果您从字面上看只是Google的错误, a href =“http://devpit.org/wiki/Gn ..
发布时间:2018-04-21 10:56:38 其他开发

gcc:为什么需要-lm标志来链接数学库?

我刚刚发现gcc需要 -lm 标志来编译引用数学库函数的程序。我想知道为什么在编译包含其他库(如时间库)的程序时不需要显式链接标志。如果我编写一个程序调用 time()函数,即使没有链接选项,也可以毫无问题地进行编译。但是,如果没有 -lm 标志,涉及数学库的程序将无法正常工作。 任何人都可以解释这种行为背后的原因吗?感谢您的时间。 解决方案 因为没有人愿意修复的荒谬历史实践。将C和 ..
发布时间:2018-04-20 15:50:23 其他开发

我如何链接到特定的glibc版本?

当我在Ubuntu Lucid 10.04 PC上编译一些内容时,它会与glibc链接。 Lucid使用2.11的glibc。当我在另一台装有旧版glibc的PC上运行这个二进制文件时,该命令失败,说没有glibc 2.11 ... 据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗? 在我的具体使用中,我尝试为ARM编译一个gcc交叉工具链。 解决方案 ..
发布时间:2018-04-20 15:41:59 服务器开发

getc()作为宏和C标准库函数的定义,相干?

在 [7.1.4使用库函数] 中,我读到: 一个头文件可以被另外实现为头文件中定义的一个 函数类的宏... 和 任何被实现为宏 的库函数的调用都应该扩展为代码,它将每个参数精确地评估一次。 然后为 getc , [7.21.7.5 getc函数 $ b getc函数等同于fgetc,除非如果 被实现为宏,它可能会多次评估流,所以 参数不应该是一个带有副作用的 ..
发布时间:2018-04-17 18:12:43 其他开发