Tag: glibc

MAP_ANONYMOUS符合C99标准

我有一个使用mmap系统调用的应用程序,我有一个问题,让它编译几个小时,看看为什么我得到MAP_ANON和MAP_ANONYMOUS未声明,我有一小部分代码,我用过,我看到我可以编译它就好了,所以我尝试了一个基本的编译,这工作,我看到它添加-std = c99失败。 是否有特定原因导致MAP_ANON和MAP_ANONYMOUS在C99标准中无效? 我知道它们不是由POSIX定义的,而是由BSD SOURCE定义的,所以我只想知道为什么会这样。

检测到glibc,realloc():指针无效

我为冗长的代码道歉。 我有一个简单的问题,但我认为我包含了我的代码,所以我很清楚我来自哪里。 我得到了realloc腐败。 我认为腐败是因为我没有正确解放。 实际上我不确定glibc甚至说或意味着什么。 任何人都能简单地向我解释一下吗? 再次抱歉冗长的代码。 #include “draw2.h” #include “draw2a.h” #include “draw2b.h” const char Exec_c[] = “java -jar Sketchpad.jar”; void parseFile(FILE * fp, FILE *sketcher){ char line [MAX_WORD] = {“NULL”}; char word [MAX_WORD] = {“NULL”}; char figureName [MAX_WORD] = {“NULL”}; struct figure *pointsAndname; long int countNumberoffigures = 0; printOutput(); long int temp = 10; […]

GCC中strlen()的实现在哪里?

有人能指出我在GCC中对strlen()的定义吗? 我现在大约半小时一直在试用版本4.4.2(当谷歌疯狂时),我似乎无法找到strlen()实际实现的位置。

glibc函数检索当前的可执行文件名?

我想知道是否有一个glibc函数,我可以使用gcc / g ++来检索当前的可执行文件。 这样做的目的是为addr2line提供-e参数,如本答案所示

如何使用getaddrinfo_a与glibc进行异步解析

一个经常被忽视的function,不需要外部库,但基本上没有任何文档。

gcc如何自动知道包含glib库

我在C中使用glib.h编写简单的程序,但是当我编译它时,我得到一个错误: $ gcc test.c -o test test.c:3:18: fatal error: glib.h: No such file or directory compilation terminated. 所以从上面看来gcc找不到glib.h文件(这是libglib2.0-dev软件包的一部分并且已经安装了它)。 所以首先我尝试在我的系统中找到glib.h文件并找到如下输出: $ locate glib.h /usr/src/linux-headers-3.2.0-29-generic-pae/include/config/blk/dev/bsglib.h /usr/src/linux-headers-3.2.0-48-generic-pae/include/config/blk/dev/bsglib.h /usr/src/linux-headers-3.2.0-57-generic-pae/include/config/blk/dev/bsglib.h 然后我尝试了命令: $ pkg-config –cflags glib-2.0 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include 为GCC获得正确的标志,但它仍然显示相同的错误。 所以试着从SO中找到解决方案并找到精确的解决方案 $ gcc test.c -Wall -o test `pkg-config –cflags –libs glib-2.0` 这个命令解决了我的问题 但我有疑问,是不是有任何方法可以告诉gcc包含glib库所以不需要在gcc之后给出标志pkg-config –cflags –libs glib-2.0并简单地通过gcc test.c -o test编译我的文件?

如何将库定义的符号加载到指定的位置?

测试在Ubuntu 12.04,32位, gcc 4.6.3。 基本上我正在对ELF二进制文件进行一些二进制操作工作,我现在要做的是组装一个汇编程序并保证libc符号被我加载到预定义的地址。 让我在一个简单的例子中详细说明。 假设在原始代码中使用了libc符号stdout@GLIBC_2.0 。 #include int main() { FILE* fout = stdout; fprintf( fout, “hello\n” ); } 当我编译它并使用以下命令检查符号地址时: gcc main.c readelf -s a.out | grep stdout 我懂了: 0804a020 4 OBJECT GLOBAL DEFAULT 25 stdout@GLIBC_2.0 (2) 0804a020 4 OBJECT GLOBAL DEFAULT 25 stdout@@GLIBC_2.0 和.bss部分是这样的: readelf -S a.out | grep bss [25] .bss […]

fputwc(),putwc()和putwchar()在glibc中的定义不一致

为什么fputwc() , putwc()和putwchar()接受wchar_t类型的参数而不是wint_t ? 这与相应的非宽字符函数fputc() , putc()和putchar()相矛盾, 它们采用int而不是char 。

传递给C库的函数指针的C链接

我的情况非常简单:我希望我的C ++程序能够处理Unix信号。 为此,glibc在signal.h中提供了一个名为sigaction的函数,它希望接收一个函数指针作为它的第二个参数。 extern “C” { void uponSignal(int); } void uponSignal(int) { // set some flag to quit the program } static void installSignalHandler() { // initialize the signal handler static struct sigaction sighandler; memset( &sighandler, 0, sizeof(struct sigaction) ); sighandler.sa_handler = uponSignal; // install it sigaction( SIGINT, &sighandler, nullptr ); } 我的问题是: extern “C”链接说明符是否必要? […]

gets()函数和输入中的’\ 0’零字节

如果从文件读取零字节( ‘\0’ ),来自C语言的gets()函数(例如来自glibc)是否会停止? 快速测试: echo -ne ‘AB\0CDE’ 谢谢。 PS这个问题来自这个问题的评论: 回归libc – 问题 PPS gets函数是危险的,但这是一个关于这个函数本身的问题,而不是关于任何人是否应该使用它。