有没有什么办法平铺Obj文件到指定的路径? #6653
Unanswered
pentatracy5
asked this question in
Q&A
Replies: 1 comment
-
win 长路径限制,你平铺解决不了任何问题,只会平白增加冲突等各种其他问题,而且还导致多端行为不一致。 长路径只能通过 参数文件来解,目前 cl/link 都做了支持。 xmake/xmake/modules/core/tools/cl.lua Line 666 in 990cde6 xmake/xmake/core/base/winos.lua Line 154 in 990cde6 但 nvcc 目前没处理,我也没环境处理,另外也要 nvcc 自身支持参数文件,你可以自己研究下,提个 pr 过来。 xmake/xmake/modules/core/tools/nvcc.lua Line 312 in 990cde6 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
核心问题:如何在指定的路径下平铺Obj文件?如果可以平铺,Obj文件有重名的情况如何处理?
平台:windows
工具:VS2019 + Cuda10.2 + xmake2.9.9
编译错误:nvcc link 失败
错误消息:[ 99%]: devlinking.debug DLL1_gpucode.cu.obj
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin\nvcc" -o Obj\DLL1\windows\x64\debug\rules\cuda\devlink\DLL1_gpucode.cu.obj [一大堆.obj文件的路径] "-LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64" cublas.lib cudart_static.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib -lcudadevrt -lcudart_static -gencode=arch=compute_30,code=sm_30 -m64 -dlink -shared
error: @programdir\core\main.lua:329: @programdir\actions\build\main.lua:148: @programdir\modules\async\runjobs.lua:325: @programdir\rules\cuda\devlink\devlink.lua:107: @programdir\core\sandbox\modules\os.lua:273: [一大堆.obj文件的文件名 + 链接的静态库]
stack traceback:
[C]: in function 'error'
[@programdir\core\base\os.lua:1075]:
[@programdir\core\sandbox\modules\os.lua:273]: in function 'runv'
[@programdir\modules\core\tools\nvcc.lua:302]:
[C]: in function 'xpcall'
[@programdir\core\base\utils.lua:246]:
[@programdir\core\tool\linker.lua:232]: in function 'link'
[@programdir\rules\cuda\devlink\devlink.lua:107]: in function 'callback'
[@programdir\modules\core\project\depend.lua:227]: in function 'on_changed'
[@programdir\rules\cuda\devlink\devlink.lua:91]:
[@programdir\actions\build\kinds\shared.lua:104]: in function '_link_target'
[@programdir\actions\build\kinds\shared.lua:143]: in function 'jobfunc'
[@programdir\modules\async\runjobs.lua:241]:
[C]: in function 'xpcall'
[@programdir\core\base\utils.lua:246]: in function 'trycall'
[@programdir\core\sandbox\modules\try.lua:117]: in function 'try'
[@programdir\modules\async\runjobs.lua:224]: in function 'cotask'
[@programdir\core\base\scheduler.lua:406]:
stack traceback:
[C]: in function 'error'
@programdir\core\base\os.lua:1075: in function 'os.raiselevel'
(...tail calls...)
@programdir\core\main.lua:329: in upvalue 'cotask'
@programdir\core\base\scheduler.lua:406: in function <@programdir\core\base\scheduler.lua:399>
已尝试的解决方案及结果:因为在vs项目中链接也是成功的,查询到vs工程是直接将所有.obj文件放到项目根目录下的x64\debug文件夹中。所以直接在项目根目录下创建文件夹Objs,然后手动把所有.obj文件拷进去(目前文件名没有重名的,所以直接放进去了)。再直接在命令行执行链接指令,除了.obj文件路径不同,其他flags均保持一致。结果成功。
原因猜测:.obj文件路径太长了,导致执行指令太长。之前遇到过因为路径太长导致msvc linker链接失败的情况,区别是msvc linker会报错。
验证方案:把生成的.obj文件在一个较短的路径(比如项目根目录下的文件夹Objs)下平铺
Beta Was this translation helpful? Give feedback.
All reactions