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:
1 parent
e79ea010b0
commit
a2874a14e6
4 files changed
+499
-498
No files matched your search
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user