【问题标题】:GLib: Replacement for deprecated functions in newer version glibGLib:替换较新版本 glib 中已弃用的函数
【发布时间】:2020-06-16 04:46:58
【问题描述】:

最近我们计划将 glib 库升级到最新版本:2.64

我们已经构建了库并尝试在我们的构建基础架构中使用它。在运行构建时,我们遇到了错误:-

error: 'g_mem_chunk_alloc0' is deprecated
error: 'g_mem_chunk_free' is deprecated
error: 'g_mem_chunk_alloc' is deprecated 
error: 'g_atexit' is deprecated 

我们如何在较新的 glib 版本中找到那些已弃用的函数的替换?

【问题讨论】:

  • 在您的问题中显示一些minimal reproducible example。解释为什么你需要使用g_mem_chunk_alloc0 代替callocmalloc,以及g_memchunk_free 代替free。考虑使用atexit(3)。您的问题是特定于操作系统的。
  • 这些符号正在从新的 glib 库中使用。旧版 glib 库版本支持这些符号,而新版本则不支持这些符号......所以我们面临着被弃用的函数错误。对于那些不推荐使用的函数,应该有一些新 glib 的替换函数。我无法从 glib 文档中找到该信息。因此,如果可以得到一些帮助,请在此处发布。
  • 仔细阅读documentation of Glib了吗?它是开源的,所以你研究过它的源代码吗?根据 LGPLv2.1 许可证,您可以根据自己的需要改进 Glib
  • Jussi,但是上面的链接没有明确的信息,比如替换 'g_mem_chunk_free' 是某某功能...我们如何才能找到确切的信息?我应该将 g_slice_alloc 视为 g_mem_chunk_alloc 的替代品吗?

标签: compilation glib


【解决方案1】:
error: 'g_mem_chunk_alloc0' is deprecated
error: 'g_mem_chunk_free' is deprecated
error: 'g_mem_chunk_alloc' is deprecated 

g_mem_chunk_*() API 是 deprecated in 2005(15 年前),所有提及它们的都是 removed from the documentation in 2011(9 年前)。

我认为将已弃用函数的文档保留 15 年是不合理的(这会导致更多的混乱而不是解决问题)。

GSlice APIGMemChunk 的替代品。特别是: * g_mem_chunk_alloc0()g_slice_alloc0() * g_mem_chunk_free()g_slice_free() * g_mem_chunk_alloc()g_slice_alloc()

这些不会是已弃用 API 的 1:1 替代品,否则当时的开发人员本可以避免弃用这些 API。您可能需要重新编写代码。


error: 'g_atexit' is deprecated 

documentation for g_atexit() 解释说没有替代品:

atexit() 在动态加载模块的上下文中的行为没有正式指定并且变化很大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多