问题标签 [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.
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,
c - 为什么 container_of 不在 glibc 中?
在 libc/glibc 中可能无法接受 container_of() 是否有技术原因?
谢谢,陈兹
native - 为什么原生程序直接执行时运行良好,但通过 Condor 提交时因 seg 错误而失败
我有一个第三方库,我正在尝试将其合并到模拟中。我们有静态库 (.a),以及它的所有运行时依赖项(共享对象)。我创建了一个与库链接的非常简单的应用程序(用 C 语言)。它所做的只是调用作为第三方库 API 一部分的初始化函数,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交到我们的 Condor 网格,它会因 strncpy (libc.so.6) 上的段错误而失败。我已经强制 condor 只在特定机器上运行可执行文件,如果我直接在该机器上运行它,它工作正常。
我主要是一名 Java 程序员......本机编码经验有限。我对 nm、ldd、catchsegv 等工具非常熟悉,以至于我可以运行它们。我真的不知道从哪里开始寻找问题。
我已经直接在执行机器上运行 ldd,并通过 condor 提交的脚本以及我的可执行文件。ldd 在两种情况下都报告相同的文件。
我不明白直接运行它是如何工作的,但它会失败由秃鹰运行。最终执行程序的进程 condor_startd 是一个以 root 身份启动的进程,并将其有效 uid 更改为提交者。也许这与它有关?
shared-libraries - Libc 共享库如何加载到内存中并在进程之间共享?
我想了解 Libc 共享库是如何加载到内存中并在进程之间共享的?是否有一个 libc 实例加载到内存中并在所有进程之间共享,或者它是每个进程在内存中的每个 libc 实例。我不清楚 libc 如何在进程之间共享。
谢谢阿迪亚
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,
谢谢!
c - 向 libc 添加新功能
如何添加新的 libc 函数并从 C 程序中调用它?新函数不是任何内核级系统调用的包装器。它的功能将在用户空间中完成。
c++ - libc 是如何工作的?
我正在编写一个 MIPS32 仿真器,并希望在使用 gcc 编译 C 程序时能够使用整个标准 C 库(可能带有 GNU 扩展)。
据我所知,I/O 由 MIPS32 架构上的系统调用处理。要使用 libc/glibc 成功运行程序,我如何知道我需要模拟哪些系统调用?(无需反复试验)
编辑:有关我所说的系统调用的示例,请参阅this 。
(如果您有兴趣,可以在这里查看该项目,欢迎任何反馈。请记住,它处于非常早期的阶段)
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,这就是为什么我需要一个确定的方法来检测某个功能是否可用。
c - 为什么要使用'errno'?
我是 Technion 的一名 CS 学生,我刚刚了解了errno
变量和 c 风格的函数调用。这让我想知道,如果 c 风格的系统调用使用寄存器来返回一个值,那么为什么还要使用errno
呢?