问题标签 [libc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1754 浏览

glibc - 如何在 Gentoo 上安装 glibc 2.3.2?

我写了一个应用程序,我需要在 Gentoo 上执行它,但是当我尝试运行它时,我收到以下消息:

/lib/libc.so.6:未找到版本“GLIBC_2.3.4”(/usr/local/myapp/lib/myapplib.so.1 需要)

这个 gentoo 中当前的 GLIBC 版本是 2.3.2。

我无法更新这个 glibc,因为我没有权限,所以我需要将我的 glibc '降级'到相同的版本(2.3.2)......我该怎么做?

tks,

0 投票
1 回答
582 浏览

c - 为什么 container_of 不在 glibc 中?

在 libc/glibc 中可能无法接受 container_of() 是否有技术原因?

谢谢,陈兹

0 投票
1 回答
114 浏览

native - 为什么原生程序直接执行时运行良好,但通过 Condor 提交时因 seg 错误而失败

我有一个第三方库,我正在尝试将其合并到模拟中。我们有静态库 (.a),以及它的所有运行时依赖项(共享对象)。我创建了一个与库链接的非常简单的应用程序(用 C 语言)。它所做的只是调用作为第三方库 API 一部分的初始化函数,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交到我们的 Condor 网格,它会因 strncpy (libc.so.6) 上的段错误而失败。我已经强制 condor 只在特定机器上运行可执行文件,如果我直接在该机器上运行它,它工作正常。

我主要是一名 Java 程序员......本机编码经验有限。我对 nm、ldd、catchsegv 等工具非常熟悉,以至于我可以运行它们。我真的不知道从哪里开始寻找问题。

我已经直接在执行机器上运行 ldd,并通过 condor 提交的脚本以及我的可执行文件。ldd 在两种情况下都报告相同的文件。

我不明白直接运行它是如何工作的,但它会失败由秃鹰运行。最终执行程序的进程 condor_startd 是一个以 root 身份启动的进程,并将其有效 uid 更改为提交者。也许这与它有关?

0 投票
1 回答
4070 浏览

shared-libraries - Libc 共享库如何加载到内存中并在进程之间共享?

我想了解 Libc 共享库是如何加载到内存中并在进程之间共享的?是否有一个 libc 实例加载到内存中并在所有进程之间共享,或者它是每个进程在内存中的每个 libc 实例。我不清楚 libc 如何在进程之间共享。

谢谢阿迪亚

0 投票
3 回答
3007 浏览

linux-kernel - 为什么许多系统调用(getpid)使用 strace 只捕获一次?

我在一个程序中多次调用getpid()strace (测试系统调用的效率),但是当我用来获取跟踪时,只捕获了一个getpid()调用。

代码很简单:

我使用gdb并得到了这个:

我不太明白汇编代码。如果有人可以对此进行详细解释,那也会很有帮助。根据我的观察,“call *%gs:0x10”(跳转到vdso)没有被执行,除了第一个getpid()调用,这可能是后续getpid()调用没有被捕获的原因。但我不知道为什么。

linux内核:2.6.24-29 gcc (GCC) 4.2.4 libc 2.7,

谢谢!

0 投票
1 回答
533 浏览

c - 向 libc 添加新功能

如何添加新的 libc 函数并从 C 程序中调用它?新函数不是任何内核级系统调用的包装器。它的功能将在用户空间中完成。

0 投票
1 回答
186 浏览

gcc - 使用 libc 库编译

我在这里描述的代码中使用了 stricmp()

它给出了一个编译错误undefined reference tostricmp'`。

如何使用带有 -c 选项的 libc 库进行编译?

0 投票
4 回答
1294 浏览

c++ - libc 是如何工作的?

我正在编写一个 MIPS32 仿真器,并希望在使用 gcc 编译 C 程序时能够使用整个标准 C 库(可能带有 GNU 扩展)。

据我所知,I/O 由 MIPS32 架构上的系统调用处理。要使用 libc/glibc 成功运行程序,我如何知道我需要模拟哪些系统调用?(无需反复试验)

编辑:有关我所说的系统调用的示例,请参阅this 。

(如果您有兴趣,可以在这里查看该项目,欢迎任何反馈。请记住,它处于非常早期的阶段)

0 投票
1 回答
2128 浏览

glibc - 如何关联 glibc 和“libc”版本?

realpath我的 Linux 机器上的手册页说:

这是什么意思?它指的是哪个 libc - “Linux libc”?- 我在哪里可以找到一个与不同的 libc 风格相匹配的列表,这样我就可以看到链接到这个函数和其他函数的最低要求是什么?

GLIBC 的版本为 2.13,远低于 4.5.21,但关于 glibc 的 Wikipedia 页面说:

在 1990 年代初期,Linux 内核的开发者分叉了 glibc。他们的分支,称为“Linux libc”,多年来一直单独维护,并发布了版本 2 到 5。

... 和

最后使用的 Linux libc 版本使用内部名称 (soname) libc.so.5。在此之后,Linux 上的 glibc 2.x 使用 soname libc.so.6

这是否意味着任何 glibc 都等同于主版本高于 5 的“Linux libc”?

还有其他手册页引用了这个或那个版本的“libc”,所以realpath这只是整个问题的一个例子。

注意:我正在构建的代码不限于Linux,这就是为什么我需要一个确定的方法来检测某个功能是否可用。

0 投票
4 回答
3607 浏览

c - 为什么要使用'errno'?

我是 Technion 的一名 CS 学生,我刚刚了解了errno变量和 c 风格的函数调用。这让我想知道,如果 c 风格的系统调用使用寄存器来返回一个值,那么为什么还要使用errno呢?