这个问题与以下方面密切相关:
B. Link 《2005年卡纳克里试图将数份《世界人权宣言》文件汇编为
Following advice from here: https://meta.stackexchange.com/questions/42343/same-question-but-not-quite and here https://meta.stackexchange.com/questions/8910/asking-a-similar-but-not-the-same-question
我正在提出一个非常相似的问题,但我想绝对清楚我的问题与上述问题之间的区别。
我正在把标题中的链接器错误列入多个来源档案中,该档案载有“条码”__device__功能的定义。
这与A链接不同,因为<代码>__kernel__功能,device__
。 根据《世界人权宣言》手册,这意味着<代码>inline:
In device code compiled for devices of compute capability 1.x, a
__device__
function is always inlined by default. The__noinline__
function qualifier however can be used as a hint for the compiler not to inline the function if possible (see Section E.1).
联系B更为相关(一个答案正确地指出,看上去看不看手册所说的话),而是将B连接起来,指由NVIDIA运送的头盔,而不是由自己的头盔运送,而这个问题很可能属于我的头部档案,但最不可能出现在NVIDIA的头号档案中。 换言之,联系B和我的问题可能有不同的答案。
同时,我发现,宣布“条码”__device__在中解决了这一问题,因此,上述只是为了记录世界其他地区的解决办法。
公开的问题是这种行为的原因。
可能的解释 我来了:
- The manual is wrong
nvcc -arch=compute_11
does not qualify as "compiling for devices of compute capability 1.x" or there is a bug in nvcc- this is MS-VS specific and does work on platforms tested by NVIDIA
- I have a severe misconception about how
inline
works. A non cuda related example ca ne found here: Multiply defined linker error using inlined functions My understanding is the one expressed by "caf" there that "the compiler shouldn t generate an external definition of the function, so it shouldn t bother the linker" others over there seemed to disagree.
我非常想知道,如果有更多的人能够澄清这里发生的情况。