标签: libc

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

当我在我的Ubuntu Lucid 10.04 PC上编译某些内容时,它会与glibc链接.Lucid使用了2.11的glibc.当我在另一台带有旧glibc的PC上运行这个二进制文件时,命令失败说没有glibc 2.11 ......

据我所知,glibc使用符号版本控制.我可以强制gcc链接特定的符号版本吗?

在我的具体用法中,我尝试为ARM编译gcc交叉工具链.

linux linker gcc glibc libc

99
推荐指数
7
解决办法
8万
查看次数

硬浮点数和软浮点数之间有什么区别?

当我用我的交叉工具链编译C代码时,链接器打印警告页面,说我的可执行文件使用硬浮动,但我的libc使用软浮动.有什么不同?

c linux floating-point arm libc

95
推荐指数
5
解决办法
6万
查看次数

fread/fwrite以大小和计数为参数的理由是什么?

我们在这里讨论了为什么fread和fwrite为每个成员计算一个大小并计算并返回读/写成员的数量,而不仅仅是采用缓冲区和大小.我们可以想到的唯一用途是,如果你想读/写一个结构数组,这些结构不能被平台对齐整除,因此已被填充,但这并不能保证这一选择在设计中.

来自FREAD(3):

函数fread()从流指向的流中读取数据的nmemb元素,每个数据字节长,将它们存储在ptr给定的位置.

函数fwrite()将每个大小字节长的数据的nmemb元素写入stream指向的流,从ptr给出的位置获取它们.

fread()和fwrite()返回成功读取或写入的项目数(即不是字符数).如果发生错误或达到文件结尾,则返回值为短项目计数(或零).

c libc

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

snprintf()总是null终止?

snprintf是否始终为null终止目标缓冲区?

换句话说,这是否足够:

char dst[10];

snprintf(dst, sizeof (dst), "blah %s", somestr);
Run Code Online (Sandbox Code Playgroud)

或者你必须这样做,如果somestr足够长?

char dst[10];

somestr[sizeof (dst) - 1] = '\0';
snprintf(dst, sizeof (dst) - 1, "blah %s", somestr);
Run Code Online (Sandbox Code Playgroud)

我对标准所说的以及一些流行的libc可能做的不是标准行为感兴趣.

c posix libc

73
推荐指数
4
解决办法
5万
查看次数

链接旧版本的libc以提供更大的应用程序覆盖率

Linux二进制文件通常动态链接到核心系统库(libc).这使得二进制文件的内存占用空间非常小,但依赖于最新库的二进制文件将无法在较旧的系统上运行.相反,链接到旧库的二进制文件将在最新系统上运行愉快.

因此,为了确保我们的应用程序在分发期间具有良好的覆盖率,我们需要找出我们可以支持的最旧的libc并将我们的二进制文件链接起来.

我们应该如何确定我们可以链接到的最旧版本的libc?

linux linker libc

64
推荐指数
4
解决办法
3万
查看次数

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

我刚刚发现-lmgcc需要这个标志,以便编译一个从数学库中引用函数的程序.我想知道为什么在编译包含其他库(如时间库)的程序时不需要显式链接标志.如果我编写一个time()调用该函数的程序,即使没有链接选项也可以编译没有任何问题.但是如果没有-lm旗帜,那么涉及数学库的程序将无法运行.

任何人都可以解释这种行为背后的原因吗?谢谢你的时间.

gcc libc

62
推荐指数
0
解决办法
4万
查看次数

如何使用libc的调试版

问题的简短版本: 如何让gdb使用libc的调试符号?

更长版本: 我正在使用gdb调试程序,我想查看有关libc使用的futex的信息.但是,在调试期间的某个时刻,我得到的输出如下:

Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e in ?? () from /lib/libc.so.6
(gdb) bt
#0  0x00007ffff772b73e in ?? () from /lib/libc.so.6
#1  0x00007ffff767fb90 in ?? () from /lib/libc.so.6
#2  0x00007ffff767a4c0 in vfprintf () from /lib/libc.so.6
#3  0x00007ffff768565a in printf () from /lib/libc.so.6
....
Run Code Online (Sandbox Code Playgroud)

当我info sharedlibrary在断点处运行gdb时,我看到:

(gdb) info sharedlibrary
From                To                  Syms Read   Shared Object Library
0x00007ffff7dddaf0  0x00007ffff7df6704  Yes (*)     /lib64/ld-linux-x86-64.so.2
0x00007ffff7bc53e0  0x00007ffff7bd1388  Yes (*)     /lib/libpthread.so.0
0x00007ffff79ba190  0x00007ffff79bd7d8  Yes (*)     /lib/librt.so.1
0x00007ffff76538c0  0x00007ffff7766c60  Yes (*) …
Run Code Online (Sandbox Code Playgroud)

linux gdb libc ldd

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

没有libc编译

我想在没有(g)libc的情况下编译我的C代码.如何停用它以及哪些功能依赖于它?

我尝试了-nostdlib但它没有帮助:代码是可编译的并运行,但我仍然可以在我的可执行文件的hexdump中找到libc的名称.

c gcc glibc libc demo

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

ptrdiff_t在C中定义在哪里?

哪里是ptrdiff_t在C中规定?如果不重要,我怎样才能在Linux上从GCC看到这种类型?

c types libc stdint

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

第一个"c"在"calloc"中代表什么?

一名学生问了这个问题,我不确定.

猜测包括:"计数","清算","分块","完整",......

标准库文档没有说明它代表什么,并且没有类似命名的函数来指示模式.有没有人知道实际的词源,也许有一个权威的参考来支持它?

c malloc libc calloc c-standard-library

44
推荐指数
2
解决办法
7415
查看次数

标签 统计

libc ×10

c ×6

linux ×4

gcc ×3

glibc ×2

linker ×2

arm ×1

c-standard-library ×1

calloc ×1

demo ×1

floating-point ×1

gdb ×1

ldd ×1

malloc ×1

posix ×1

stdint ×1

types ×1