xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
9.84k stars 776 forks source link

报错unable to rename #1864

Closed Dozingfiretruck closed 2 years ago

Dozingfiretruck commented 2 years ago

您好,我添加了一些静态库,走add_deps image 报错unable to rename image image 走-j1单线程编译无问题,请问有什么办法解决?

xq114 commented 2 years ago

xmake -v -D贴完整log

Dozingfiretruck commented 2 years ago

image

waruqi commented 2 years ago

看不出啥来,感觉像是这个工具链自身的问题

Dozingfiretruck commented 2 years ago

看不出啥来,觉得这个工具链自身的问题

走xmake的add_deps或者add_links都会这样,现在是在ldflags走命令连接的 target:add("ldflags", flto .. "-Wl,--gc-sections -Wl,-zmax-page-size=1024 -Wl,--whole-archive ./lib/libwmarch.a ./lib/libapp.a ./lib/libgt.a ./lib/libwlan.a ./lib/libdsp.a ./lib/libbtcontroller.a -Wl,--no-whole-archive -mcpu=ck804ef -nostartfiles -mhard-float -lm -Wl,-T./ld/"..TARGET_NAME..".ld -Wl,-ckmap=./build/out/"..TARGET_NAME..".map ",{force = true}) 这样可以正常编译

waruqi commented 2 years ago

看错误,有可能是多任务编译问题,可以尝试 xmake -j1 试试,也可能是 这个工具链的 ar 不支持 win 的 \ 格式路径。

但目前,你给的信息太少,我看不出什么。

可以搞个简单demo 提供下复现例子,上传过来,包括对应的工具链。。

Dozingfiretruck commented 2 years ago

看错误,有可能是多任务编译问题,可以尝试 xmake -j1 试试,也可能是 这个工具链的 ar 不支持 win 的 \ 格式路径。

但目前,你给的信息太少,我看不出什么。

可以搞个简单demo 提供下复现例子,上传过来,包括对应的工具链。。

您好,我前面反馈时候提了一下可能您没看见,单线程编译没问题,只有多线程编译才会出现此问题,目前没搞出来简单的复现例子,貌似只有静态库多了才会出现此问题,但是工程您有时间可以看一下https://gitee.com/openLuat/luatos-soc-air101 工具链:https://occ.t-head.cn/community/download?id=3885366095506644992 中的csky-elfabiv2-tools-mingw-minilibc xmake.lua使用xmake.zip

waruqi commented 2 years ago

我这里跑了下,没啥问题,不过我这 win vm ,所以只开了 2 jobs 并行,暂时无法复现。。

如果是并行编译导致,那估计也是这个工具链自身的 ar 有点问题,一种可能是 ar 在相同目录并行生成多个 .a ,有抢占一些文件资源,导致 rename 失败,可以每个 .a 的输出目录改下试试

要么尝试全局设置 set_policy("build.across_targets_in_parallel") 禁用跨target并行,试试,target内部源文件还是并行的,只是不让它们同时进行 link 了。。

要么文档里指明 xmake -j1 禁用并行编译

Dozingfiretruck commented 2 years ago

我这里跑了下,没啥问题,不过我这 win vm ,所以只开了 2 jobs 并行,暂时无法复现。。

如果是并行编译导致,那估计也是这个工具链自身的 ar 有点问题,一种可能是 ar 在相同目录并行生成多个 .a ,有抢占一些文件资源,导致 rename 失败,可以每个 .a 的输出目录改下试试

要么尝试全局设置 set_policy("build.across_targets_in_parallel") 禁用跨target并行,试试,target内部源文件还是并行的,只是不让它们同时进行 link 了。。

要么文档里指明 xmake -j1 禁用并行编译

您好,set_policy("build.across_targets_in_parallel")之后确实解决了,产生一个警告 warning: policy(build.across_targets_in_parallel): invalid value type(table), it shound be 'boolean'! 请问这个需要有什么改动消除此警告么? image

waruqi commented 2 years ago

set_policy("build.across_targets_in_parallel", true)

Dozingfiretruck commented 2 years ago

set_policy("build.across_targets_in_parallel", true)

设置set_policy("build.across_targets_in_parallel", false)后可以了,非常感谢指导,哈哈