问题标签 [glibc]
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.
c - 如何使用 getaddrinfo_a 与 glibc 进行异步解析
一个经常被忽视的函数,它不需要外部库,但基本上没有任何文档。
dns - 使用 glibc,为什么在 I/DHCP 更改 DNS 服务器后我的 gethostbyname 失败?
如果我们的服务器(在设备上运行)在获得 DHCP 租约之前启动,那么它永远无法使用主机名进行连接。
如果发生这种情况,它可以通过 IP 地址而不是 DNS 找到主机。
我最初认为 Curl DNS 缓存有问题,因为 curl 连接失败。但是我使用 CURLOPT_DNS_CACHE_TIMEOUT 来防止 curl 缓存地址,但连接仍然失败。
linux - How to force abort on "glibc detected *** free(): invalid pointer"
In Linux environment, when getting "glibc detected *** free(): invalid pointer" errors, how do I identify which line of code is causing it?
Is there a way to force an abort? I recall there being an ENV var to control this?
How to set a breakpoint in gdb for the glibc error?
c - GLIBC:调试内存泄漏:如何解释 mtrace() 的输出
我正在尝试调试内存泄漏问题。我正在使用mtrace()来获取 malloc/free/realloc 跟踪。我已经运行了我的 prog,现在有一个巨大的日志文件。到现在为止还挺好。但我在解释文件时遇到问题。看看这些行:
奇怪的是,一个调用(相同的返回地址)负责 4 个分配。
更陌生:
在这两行之间,块 0x2aaab43a1700 永远不会被释放。
有谁知道如何解释这个?一次调用如何导致 4 次分配?malloc 怎么会返回一个之前已经分配好的地址呢?
编辑 2008/09/30:分析 GLIBC (mtrace.pl) 提供的 mtrace() 输出的脚本在这里没有任何帮助。它只会说:Alloc 0x2aaab43a1700 重复。但这怎么会发生呢?
c++ - 在 C 代码中使用 C++ 库
我有一个 C++ 库,它提供了各种用于管理数据的类。我有图书馆的源代码。
我想扩展 C++ API 以支持 C 函数调用,以便该库可以同时与 C 代码和 C++ 代码一起使用。
我正在使用 GNU 工具链(gcc、glibc 等),因此语言和架构支持不是问题。
有什么理由说明这在技术上是不可能的吗?
有什么我需要注意的问题吗?
是否有与此相关的资源、示例代码和/或文档?
我发现的其他一些事情:
- 使用以下内容来包装 C 代码需要使用的 C++ 标头。
- 将“真正的”C++ 接口保存在 C 不包含的单独头文件中。在这里考虑PIMPL 原则。在这里使用
#ifndef __cplusplus #error
东西有助于检测任何疯狂。 - 小心 C++ 标识符作为 C 代码中的名称
- C 和 C++ 编译器之间大小不同的枚举。如果您使用 GNU 工具链,这可能不是问题,但仍然要小心。
对于结构,请遵循以下形式,以免 C 混淆。
/li>然后使用指针来传递 C++ 对象,它们只需在 C 中声明为 struct X,其中 X 是 C++ 对象。
所有这一切都是由一位 C++ 天才朋友提供的。
c++ - 在 C/C++ 中进行不区分大小写的子字符串搜索的最快方法?
笔记
下面的问题是在 2008 年提出的关于 2003 年的一些代码的问题。正如 OP 的更新所显示的那样,整个帖子已被 2008 年的老式算法所淘汰,并且仅作为历史好奇心保留在这里。
我需要在 C/C++ 中进行快速不区分大小写的子字符串搜索。我的要求如下:
- 应该表现得像 strstr() (即返回一个指向匹配点的指针)。
- 必须不区分大小写 (doh)。
- 必须支持当前语言环境。
- 必须在 Windows (MSVC++ 8.0) 上可用或易于移植到 Windows(即来自开源库)。
这是我正在使用的当前实现(取自 GNU C 库):
你能让这段代码更快吗,或者你知道更好的实现吗?
注意:我注意到 GNU C 库现在有一个新的实现strstr()
,但我不确定它是否可以轻松地修改为不区分大小写,或者它实际上是否比旧的更快(在我的情况下)。我还注意到旧的实现仍然用于宽字符串,所以如果有人知道为什么,请分享。
更新
只是为了让事情清楚——以防它还没有——我没有编写这个函数,它是 GNU C 库的一部分。我只是将其修改为不区分大小写。
另外,感谢有关strcasestr()
其他来源(如 OpenBSD、FreeBSD 等)的其他实现的提示和检查。这似乎是要走的路。上面的代码来自 2003 年,这就是为什么我在这里发布它以希望有更好的版本可用,显然是这样。:)
c++ - glibc 的 '-lmcheck' 选项和多线程
我们一直在尝试寻找多线程 C++ 应用程序中的一些堆损坏问题。作为一种技术,我们尝试将 -lmcheck 添加到应用程序的库行。这导致应用程序在相对较短的时间内因明显的堆损坏而崩溃。
我们的应用确实同时使用了 malloc/free 和 new/delete(视情况而定)。
我们的一个团队想知道 -lmcheck 是否实际上是线程安全的,并在所有 malloc/free 调用周围放置了一个互斥锁。崩溃消失了。
有谁知道 -lmcheck 是否应该支持多线程?我想知道我们是否只是误解了我们正在尝试使用的工具,从而导致我们自己不必要的担心。
c - strerror_r 应该允许多大的尺寸?
OpenGroup POSIX.1-2001 定义了strerror_r,Linux 标准基础核心规范 3.1也是如此。但是我找不到对错误消息可以合理预期的最大大小的参考。我希望有一些定义可以放在我的代码中,但我找不到。
代码必须是线程安全的。这就是为什么使用 strerror_r 而不是 strerror 的原因。
有人知道我可以使用的符号吗?我应该创建自己的吗?
例子
从文件:
开放组基本规范第 6 期:
错误
如果出现以下情况,strerror_r() 函数可能会失败:
- [ERANGE]通过 strerrbuf 和 buflen 提供的存储空间不足,无法包含生成的消息字符串。
从来源:
glibc-2.7/glibc-2.7/string/strerror.c:41:
gcc - 静态链接到动态库。glibc
所以。我有一个问题,我在一台机器上有两个版本的 GCC。
3.4.6 和 4.1
这是由于新软件的一些依赖性问题。(需要 glibc 4.1)
当我将这个新软件与 4.1 库链接时,它链接得很好。但是,在执行软件时找不到库,因为它在我的 LD_LIBRARY_PATH 中查看 3.4.6。如果我将 LD_LIBRARY_PATH 设置为 4.1 库,它会炸毁外壳,并杀死其他东西,因为 3.4.6 库用于此目的。
它有点像22。
有没有什么方法可以在链接时提供该共享库的绝对路径而不使用 LD_LIBRARY_PATH?
这样我可以希望有两个版本,但只为这个特定的应用程序使用 4.1?
c - glibc 附带的 C 是否有自动调整大小的数组/动态数组实现?
glibc 或任何 C 的标准 Linux 库中是否有动态数组实现?我希望能够添加到列表中而不用担心它的大小。我知道 C++ 存在 std::vector,但我需要 C 等价物。