diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index dcff7a9..24208bd 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -2392,7 +2392,20 @@ class Phase2Translator: trans.translator._source_module_sig_files = self._shared_source_module_sig_files trans.translator._all_define_constants = self._shared_all_dc trans.translator._define_decl_types = self._shared_all_decl_types - trans.translator._export_extern_funcs = self._shared_export_extern_funcs + # 共享集合可能因 sig_files 过滤而缺少 include 模块的 extern 声明; + # 这里从本 translator 的 sig_files 合并补全(跨模块 extern 必须裸名)。 + _combined_extern: dict[str, str] = dict(self._shared_export_extern_funcs) + for _sha1_key, _sig_path in self.sig_files.items(): + try: + _, _sig_tree = parse_python_file(_sig_path) + if _sig_tree is None: + continue + for _node in ast.iter_child_nodes(_sig_tree): + if isinstance(_node, ast.FunctionDef) and _IsExportExternFuncNode(_node): + _combined_extern[_node.name] = _sha1_key + except Exception: + continue + trans.translator._export_extern_funcs = _combined_extern if self._shared_generic_class_templates: if not hasattr(trans.translator.ClassHandler, '_generic_class_templates'): trans.translator.ClassHandler._generic_class_templates = {}