chore(tpv): 移除 --allow-multiple-definition 兜底并同步缺省链接参数

main.vp 的缺省 linker flags 与 ViperBuild 内置 _c_linker 默认值去掉 -Wl,--allow-multiple-definition,与 project.vpj 同口径;Phase2 三处引用该 flag 的注释改为描述链接器选 main / 链接前按路径去重的实际机制。重建验证:跨模块内联优化完成、链接成功 139.17s。
This commit is contained in:
TermiNexus committed 2026-10-05 09:22:58 +08:00
1 parent e79ea010b0
commit a2874a14e6
4 files changed
+499 -498

No files matched your search

+4 -3
View File
@@ -1054,7 +1054,7 @@ def RunMultiFileProject(mb: memhub.MemBuddy*, source_dir: str, temp_dir: str, ou
obj_paths[0] = '\0'
obj_pos: sizet = 0
# main_obj_path: 存放定义了用户 main 的 .obj 路径(链接时放在最前面,
# 避免 --allow-multiple-definition 选择了其他模块的 wrapper main)
# 避免链接器选中其他模块的 wrapper main)
main_obj_path: bytes = stdlib.malloc(512)
if main_obj_path is None: return 1
main_obj_path[0] = '\0'
@@ -1478,7 +1478,7 @@ def RunMultiFileProject(mb: memhub.MemBuddy*, source_dir: str, temp_dir: str, ou
return 1
final_obj_paths[0] = '\0'
fop_pos: sizet = 0
# main_obj_path 放在最前面(确保 --allow-multiple-definition 选择用户 main)
# main_obj_path 放在最前面(确保链接器优先选中用户 main)
if main_obj_path[0] != '\0':
mlen: sizet = string.strlen(main_obj_path)
string.strcpy(final_obj_paths, main_obj_path)
@@ -1486,7 +1486,8 @@ def RunMultiFileProject(mb: memhub.MemBuddy*, source_dir: str, temp_dir: str, ou
# 合并 Phase B/B+ 编译的 App 非 main 模块 .obj(obj_paths,空格分隔)。
# final_obj_paths 需含 main_obj + reachable includes + App 依赖文件的 .obj,否则 App import 的模块不入链 → undefined symbol。
# obj_paths 同时含 Phase B+ 本次新编译的 includes obj(与下方 reachable 收集重复,--allow-multiple-definition 容忍,仅本次编译的少量文件)。
# obj_paths 同时含 Phase B+ 本次新编译的 includes obj(与下方 reachable 收集重复,
# 仅本次编译的少量文件;链接前按路径去重,见 BuildPipeline.link_objs_to_exe)。
if obj_pos > 0:
if fop_pos + obj_pos + 1 < OBJ_PATHS_SIZE + 512:
if fop_pos > 0: