问题标签 [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.

0 投票
1 回答
9238 浏览

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

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

0 投票
1 回答
4208 浏览

dns - 使用 glibc,为什么在 I/DHCP 更改 DNS 服务器后我的 gethostbyname 失败?

如果我们的服务器(在设备上运行)在获得 DHCP 租约之前启动,那么它永远无法使用主机名进行连接。

如果发生这种情况,它可以通过 IP 地址而不是 DNS 找到主机。

我最初认为 Curl DNS 缓存有问题,因为 curl 连接失败。但是我使用 CURLOPT_DNS_CACHE_TIMEOUT 来防止 curl 缓存地址,但连接仍然失败。

0 投票
4 回答
28011 浏览

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?

0 投票
4 回答
6671 浏览

c - GLIBC:调试内存泄漏:如何解释 mtrace() 的输出

我正在尝试调试内存泄漏问题。我正在使用mtrace()来获取 malloc/free/realloc 跟踪。我已经运行了我的 prog,现在有一个巨大的日志文件。到现在为止还挺好。但我在解释文件时遇到问题。看看这些行:

奇怪的是,一个调用(相同的返回地址)负责 4 个分配。

更陌生:

在这两行之间,块 0x2aaab43a1700 永远不会被释放。

有谁知道如何解释这个?一次调用如何导致 4 次分配?malloc 怎么会返回一个之前已经分配好的地址呢?

编辑 2008/09/30:分析 GLIBC (mtrace.pl) 提供的 mtrace() 输出的脚本在这里没有任何帮助。它只会说:Alloc 0x2aaab43a1700 重复。但这怎么会发生呢?

0 投票
4 回答
90479 浏览

c++ - 在 C 代码中使用 C++ 库

我有一个 C++ 库,它提供了各种用于管理数据的类。我有图书馆的源代码。

我想扩展 C++ API 以支持 C 函数调用,以便该库可以同时与 C 代码和 C++ 代码一起使用。

我正在使用 GNU 工具链(gcc、glibc 等),因此语言和架构支持不是问题。

有什么理由说明这在技术上是不可能的吗?

有什么我需要注意的问题吗

是否有与此相关的资源、示例代码和/或文档?


我发现的其他一些事情:

  1. 使用以下内容来包装 C 代码需要使用的 C++ 标头。

  1. 将“真正的”C++ 接口保存在 C 不包含的单独头文件中。在这里考虑PIMPL 原则。在这里使用#ifndef __cplusplus #error东西有助于检测任何疯狂。
  2. 小心 C++ 标识符作为 C 代码中的名称
  3. C 和 C++ 编译器之间大小不同的枚举。如果您使用 GNU 工具链,这可能不是问题,但仍然要小心。
  4. 对于结构,请遵循以下形式,以免 C 混淆。

    /li>
  5. 然后使用指针来传递 C++ 对象,它们只需在 C 中声明为 struct X,其中 X 是 C++ 对象。

所有这一切都是由一位 C++ 天才朋友提供的。

0 投票
10 回答
37141 浏览

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 年,这就是为什么我在这里发布它以希望有更好的版本可用,显然是这样。:)

0 投票
3 回答
2725 浏览

c++ - glibc 的 '-lmcheck' 选项和多线程

我们一直在尝试寻找多线程 C++ 应用程序中的一些堆损坏问题。作为一种技术,我们尝试将 -lmcheck 添加到应用程序的库行。这导致应用程序在相对较短的时间内因明显的堆损坏而崩溃。

我们的应用确实同时使用了 malloc/free 和 new/delete(视情况而定)。

我们的一个团队想知道 -lmcheck 是否实际上是线程安全的,并在所有 malloc/free 调用周围放置了一个互斥锁。崩溃消失了。

有谁知道 -lmcheck 是否应该支持多线程?我想知道我们是否只是误解了我们正在尝试使用的工具,从而导致我们自己不必要的担心。

0 投票
3 回答
14984 浏览

c - strerror_r 应该允许多大的尺寸?

OpenGroup POSIX.1-2001 定义了strerror_rLinux 标准基础核心规范 3.1也是如此。但是我找不到对错误消息可以合理预期的最大大小的参考。我希望有一些定义可以放在我的代码中,但我找不到。

代码必须是线程安全的。这就是为什么使用 strerror_r 而不是 strerror 的原因。

有人知道我可以使用的符号吗?我应该创建自己的吗?


例子


从文件:

开放组基本规范第 6 期:

错误

如果出现以下情况,strerror_r() 函数可能会失败:

  • [ERANGE]通过 strerrbuf 和 buflen 提供的存储空间不足,无法包含生成的消息字符串。

从来源:

glibc-2.7/glibc-2.7/string/strerror.c:41:

0 投票
3 回答
2875 浏览

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?

0 投票
4 回答
5154 浏览

c - glibc 附带的 C 是否有自动调整大小的数组/动态数组实现?

glibc 或任何 C 的标准 Linux 库中是否有动态数组实现?我希望能够添加到列表中而不用担心它的大小。我知道 C++ 存在 std::vector,但我需要 C 等价物。