q^sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/core-api/symbol-namespacesmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/zh_TW/core-api/symbol-namespacesmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/it_IT/core-api/symbol-namespacesmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ja_JP/core-api/symbol-namespacesmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ko_KR/core-api/symbol-namespacesmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/sp_SP/core-api/symbol-namespacesmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhh[/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/core-api/symbol-namespaces.rsthKubh field_body)}(h-Documentation/core-api/symbol-namespaces.rst h]h)}(h,Documentation/core-api/symbol-namespaces.rsth]h,Documentation/core-api/symbol-namespaces.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hjhhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_symbol-namespaces.rst:h]h}(h]h ]h"]h$]h&]refidcn-symbol-namespaces-rstuh1jDhKhhhhhhubhsection)}(hhh](htitle)}(h)符号命名空间(Symbol Namespaces)h]h)符号命名空间(Symbol Namespaces)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThhhhhK ubh)}(h~本文档描述了如何使用符号命名空间来构造通过EXPORT_SYMBOL()系列宏导出的内核内符号的导出面。h]h~本文档描述了如何使用符号命名空间来构造通过EXPORT_SYMBOL()系列宏导出的内核内符号的导出面。}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjThhubjS)}(hhh](jX)}(h简介h]h简介}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjuhhhhhKubh)}(hX符号命名空间已经被引入,作为构造内核内API的导出面的一种手段。它允许子系统维护者将 他们导出的符号划分进独立的命名空间。这对于文档的编写非常有用(想想SUBSYSTEM_DEBUG 命名空间),也可以限制一组符号在内核其他部分的使用。今后,使用导出到命名空间的符号 的模块必须导入命名空间。否则,内核将根据其配置,拒绝加载该模块或警告说缺少 导入。h]hX符号命名空间已经被引入,作为构造内核内API的导出面的一种手段。它允许子系统维护者将 他们导出的符号划分进独立的命名空间。这对于文档的编写非常有用(想想SUBSYSTEM_DEBUG 命名空间),也可以限制一组符号在内核其他部分的使用。今后,使用导出到命名空间的符号 的模块必须导入命名空间。否则,内核将根据其配置,拒绝加载该模块或警告说缺少 导入。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjuhhubeh}(h]id1ah ]h"]简介ah$]h&]uh1jRhjThhhhhKubjS)}(hhh](jX)}(h如何定义符号命名空间h]h如何定义符号命名空间}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhhhhKubh)}(h符号可以用不同的方法导出到命名空间。所有这些都在改变 EXPORT_SYMBOL 和与之类似的那些宏 被检测到的方式,以创建 ksymtab 条目。h]h符号可以用不同的方法导出到命名空间。所有这些都在改变 EXPORT_SYMBOL 和与之类似的那些宏 被检测到的方式,以创建 ksymtab 条目。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjS)}(hhh](jX)}(h使用EXPORT_SYMBOL宏h]h使用EXPORT_SYMBOL宏}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhhhhK!ubh)}(hX除了允许将内核符号导出到内核符号表的宏EXPORT_SYMBOL()和EXPORT_SYMBOL_GPL()之外, 这些宏的变体还可以将符号导出到某个命名空间:EXPORT_SYMBOL_NS() 和 EXPORT_SYMBOL_NS_GPL()。 它们需要一个额外的参数:命名空间(the namespace)。请注意,由于宏扩展,该参数需 要是一个预处理器符号。例如,要把符号 ``usb_stor_suspend`` 导出到命名空间 ``USB_STORAGE``, 请使用::h](hX除了允许将内核符号导出到内核符号表的宏EXPORT_SYMBOL()和EXPORT_SYMBOL_GPL()之外, 这些宏的变体还可以将符号导出到某个命名空间:EXPORT_SYMBOL_NS() 和 EXPORT_SYMBOL_NS_GPL()。 它们需要一个额外的参数:命名空间(the namespace)。请注意,由于宏扩展,该参数需 要是一个预处理器符号。例如,要把符号 }(hjhhhNhNubhliteral)}(h``usb_stor_suspend``h]husb_stor_suspend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 导出到命名空间 }(hjhhhNhNubj)}(h``USB_STORAGE``h]h USB_STORAGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, 请使用:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK#hjhhubh literal_block)}(h2EXPORT_SYMBOL_NS(usb_stor_suspend, "USB_STORAGE");h]h2EXPORT_SYMBOL_NS(usb_stor_suspend, "USB_STORAGE");}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhK)hjhhubh)}(hX/相应的 ksymtab 条目结构体 ``kernel_symbol`` 将有相应的成员 ``命名空间`` 集。 导出时未指明命名空间的符号将指向 ``NULL`` 。如果没有定义命名空间,则默认没有。 ``modpost`` 和kernel/module/main.c分别在构建时或模块加载时使用名称空间。h](h"相应的 ksymtab 条目结构体 }(hjhhhNhNubj)}(h``kernel_symbol``h]h kernel_symbol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 将有相应的成员 }(hjhhhNhNubj)}(h``命名空间``h]h 命名空间}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 集。 导出时未指明命名空间的符号将指向 }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 。如果没有定义命名空间,则默认没有。 }(hjhhhNhNubj)}(h ``modpost``h]hmodpost}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhQ 和kernel/module/main.c分别在构建时或模块加载时使用名称空间。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubeh}(h] export-symbolah ]h"]使用export_symbol宏ah$]h&]uh1jRhjhhhhhK!ubjS)}(hhh](jX)}(h$使用DEFAULT_SYMBOL_NAMESPACE定义h]h$使用DEFAULT_SYMBOL_NAMESPACE定义}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphhhhhK0ubh)}(hXG为一个子系统的所有符号定义命名空间可能会非常冗长,并可能变得难以维护。因此,我 们提供了一个默认定义(DEFAULT_SYMBOL_NAMESPACE),如果设置了这个定义, 它将成 为所有没有指定命名空间的 EXPORT_SYMBOL() 和 EXPORT_SYMBOL_GPL() 宏扩展的默认 定义。h]hXG为一个子系统的所有符号定义命名空间可能会非常冗长,并可能变得难以维护。因此,我 们提供了一个默认定义(DEFAULT_SYMBOL_NAMESPACE),如果设置了这个定义, 它将成 为所有没有指定命名空间的 EXPORT_SYMBOL() 和 EXPORT_SYMBOL_GPL() 宏扩展的默认 定义。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjphhubh)}(hXF有多种方法来指定这个定义,使用哪种方法取决于子系统和维护者的喜好。第一种方法是在 子系统的 ``Makefile`` 中定义默认命名空间。例如,如果要将usb-common中定义的所有符号导 出到USB_COMMON命名空间,可以在drivers/usb/common/Makefile中添加这样一行::h](h有多种方法来指定这个定义,使用哪种方法取决于子系统和维护者的喜好。第一种方法是在 子系统的 }(hjhhhNhNubj)}(h ``Makefile``h]hMakefile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 中定义默认命名空间。例如,如果要将usb-common中定义的所有符号导 出到USB_COMMON命名空间,可以在drivers/usb/common/Makefile中添加这样一行:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK7hjphhubj)}(h6ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE='"USB_COMMON"'h]h6ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE='"USB_COMMON"'}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhK;hjphhubh)}(hX这将影响所有 EXPORT_SYMBOL() 和 EXPORT_SYMBOL_GPL() 语句。当这个定义存在时, 用EXPORT_SYMBOL_NS()导出的符号仍然会被导出到作为命名空间参数传递的命名空间中, 因为这个参数优先于默认的符号命名空间。h]hX这将影响所有 EXPORT_SYMBOL() 和 EXPORT_SYMBOL_GPL() 语句。当这个定义存在时, 用EXPORT_SYMBOL_NS()导出的符号仍然会被导出到作为命名空间参数传递的命名空间中, 因为这个参数优先于默认的符号命名空间。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjphhubh)}(h{定义默认命名空间的第二个选项是直接在编译单元中作为预处理声明。上面的例子就会变 成::h]hz定义默认命名空间的第二个选项是直接在编译单元中作为预处理声明。上面的例子就会变 成:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjphhubj)}(hN#undef DEFAULT_SYMBOL_NAMESPACE #define DEFAULT_SYMBOL_NAMESPACE "USB_COMMON"h]hN#undef DEFAULT_SYMBOL_NAMESPACE #define DEFAULT_SYMBOL_NAMESPACE "USB_COMMON"}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKDhjphhubh)}(h<应置于相关编译单元中任何 EXPORT_SYMBOL 宏之前h]h<应置于相关编译单元中任何 EXPORT_SYMBOL 宏之前}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjphhubeh}(h]default-symbol-namespaceah ]h"]$使用default_symbol_namespace定义ah$]h&]uh1jRhjhhhhhK0ubeh}(h]id2ah ]h"]如何定义符号命名空间ah$]h&]uh1jRhjThhhhhKubjS)}(hhh](jX)}(h*如何使用命名空间中导出的符号h]h*如何使用命名空间中导出的符号}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhhhhKJubh)}(hX_为了使用被导出到命名空间的符号,内核模块需要明确地导入这些命名空间。 否则内核可能会拒绝加载该模块。模块代码需要使用宏MODULE_IMPORT_NS来 表示它所使用的命名空间的符号。例如,一个使用usb_stor_suspend符号的 模块,需要使用如下语句导入命名空间USB_STORAGE::h]hX^为了使用被导出到命名空间的符号,内核模块需要明确地导入这些命名空间。 否则内核可能会拒绝加载该模块。模块代码需要使用宏MODULE_IMPORT_NS来 表示它所使用的命名空间的符号。例如,一个使用usb_stor_suspend符号的 模块,需要使用如下语句导入命名空间USB_STORAGE:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjhhubj)}(h MODULE_IMPORT_NS("USB_STORAGE");h]h MODULE_IMPORT_NS("USB_STORAGE");}hj$sbah}(h]h ]h"]h$]h&]jjuh1jhhhKQhjhhubh)}(h这将在模块中为每个导入的命名空间创建一个 ``modinfo`` 标签。这也顺带 使得可以用modinfo检查模块已导入的命名空间::h](h=这将在模块中为每个导入的命名空间创建一个 }(hj2hhhNhNubj)}(h ``modinfo``h]hmodinfo}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubhR 标签。这也顺带 使得可以用modinfo检查模块已导入的命名空间:}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKShjhhubj)}(hR$ modinfo drivers/usb/storage/ums-karma.ko [...] import_ns: USB_STORAGE [...]h]hR$ modinfo drivers/usb/storage/ums-karma.ko [...] import_ns: USB_STORAGE [...]}hjRsbah}(h]h ]h"]h$]h&]jjuh1jhhhKVhjhhubh)}(h建议将 MODULE_IMPORT_NS() 语句添加到靠近其他模块元数据定义的地方, 如 MODULE_AUTHOR() 或 MODULE_LICENSE() 。h]h建议将 MODULE_IMPORT_NS() 语句添加到靠近其他模块元数据定义的地方, 如 MODULE_AUTHOR() 或 MODULE_LICENSE() 。}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubeh}(h]id3ah ]h"]*如何使用命名空间中导出的符号ah$]h&]uh1jRhjThhhhhKJubjS)}(hhh](jX)}(h'加载使用命名空间符号的模块h]h'加载使用命名空间符号的模块}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhhhhhK`ubh)}(hX在模块加载时(比如 ``insmod`` ),内核将检查每个从模块中引用的符号是否可 用,以及它可能被导出到的名字空间是否被模块导入。内核的默认行为是拒绝 加载那些没有指明足以导入的模块。此错误会被记录下来,并且加载将以 EINVAL方式失败。要允许加载不满足这个前提条件的模块,可以使用此配置选项: 设置 MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y 将使加载不受影响,但会 发出警告。h](h在模块加载时(比如 }(hjhhhNhNubj)}(h ``insmod``h]hinsmod}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX ),内核将检查每个从模块中引用的符号是否可 用,以及它可能被导出到的名字空间是否被模块导入。内核的默认行为是拒绝 加载那些没有指明足以导入的模块。此错误会被记录下来,并且加载将以 EINVAL方式失败。要允许加载不满足这个前提条件的模块,可以使用此配置选项: 设置 MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y 将使加载不受影响,但会 发出警告。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKbhjvhhubeh}(h]id4ah ]h"]'加载使用命名空间符号的模块ah$]h&]uh1jRhjThhhhhK`ubjS)}(hhh](jX)}(h"自动创建MODULE_IMPORT_NS声明h]h"自动创建MODULE_IMPORT_NS声明}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhhhhKjubh)}(hX缺少命名空间的导入可以在构建时很容易被检测到。事实上,如果一个模块 使用了一个命名空间的符号而没有导入它,modpost会发出警告。 MODULE_IMPORT_NS()语句通常会被添加到一个明确的位置(和其他模块元 数据一起)。为了使模块作者(和子系统维护者)的生活更加轻松,我们提 供了一个脚本和make目标来修复丢失的导入。修复丢失的导入可以用::h]hX缺少命名空间的导入可以在构建时很容易被检测到。事实上,如果一个模块 使用了一个命名空间的符号而没有导入它,modpost会发出警告。 MODULE_IMPORT_NS()语句通常会被添加到一个明确的位置(和其他模块元 数据一起)。为了使模块作者(和子系统维护者)的生活更加轻松,我们提 供了一个脚本和make目标来修复丢失的导入。修复丢失的导入可以用:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjhhubj)}(h $ make nsdepsh]h $ make nsdeps}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKrhjhhubh)}(h5对模块作者来说,以下情况可能很典型::h]h4对模块作者来说,以下情况可能很典型:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjhhubj)}(h- 编写依赖未导入命名空间的符号的代码 - ``make`` - 注意 ``modpost`` 的警告,提醒你有一个丢失的导入。 - 运行 ``make nsdeps``将导入添加到正确的代码位置。h]h- 编写依赖未导入命名空间的符号的代码 - ``make`` - 注意 ``modpost`` 的警告,提醒你有一个丢失的导入。 - 运行 ``make nsdeps``将导入添加到正确的代码位置。}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKvhjhhubh)}(h对于引入命名空间的子系统维护者来说,其步骤非常相似。同样,make nsdeps最终将 为树内模块添加缺失的命名空间导入::h]h对于引入命名空间的子系统维护者来说,其步骤非常相似。同样,make nsdeps最终将 为树内模块添加缺失的命名空间导入:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hjhhubj)}(hX!- 向命名空间转移或添加符号(例如,使用EXPORT_SYMBOL_NS())。 - `make e`(最好是用allmodconfig来覆盖所有的内核模块)。 - 注意 ``modpost`` 的警告,提醒你有一个丢失的导入。 - 运行 ``maknsdeps``将导入添加到正确的代码位置。h]hX!- 向命名空间转移或添加符号(例如,使用EXPORT_SYMBOL_NS())。 - `make e`(最好是用allmodconfig来覆盖所有的内核模块)。 - 注意 ``modpost`` 的警告,提醒你有一个丢失的导入。 - 运行 ``maknsdeps``将导入添加到正确的代码位置。}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhK~hjhhubh)}(hG你也可以为外部模块的构建运行nsdeps。典型的用法是::h]hF你也可以为外部模块的构建运行nsdeps。典型的用法是:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h,$ make -C M=$PWD nsdepsh]h,$ make -C M=$PWD nsdeps}hj"sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubeh}(h]module-import-nsah ]h"]"自动创建module_import_ns声明ah$]h&]uh1jRhjThhhhhKjubeh}(h](symbol-namespacesjQeh ]h"]()符号命名空间(symbol namespaces)cn_symbol-namespaces.rsteh$]h&]uh1jRhhhhhhhK expect_referenced_by_name}j>jFsexpect_referenced_by_id}jQjFsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jWN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjherror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh، _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}jQ]jFasnameids}(j>jQj=j:jjjjjmjjjjjsjpjjj5j2u nametypes}(j>j=jjjmjjsjj5uh}(jQjTj:jTjjujjjjjjjpjpjjjvj2ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jvKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h>Hyperlink target "cn-symbol-namespaces-rst" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceh،lineKuh1juba transformerN include_log]?Documentation/translations/zh_CN/core-api/symbol-namespaces.rst(NNNNta decorationNhhub.