Visual studio 2010 Microsoft Visual Studio未将我的CUDA.obj文件链接到我的.lib

Visual studio 2010 Microsoft Visual Studio未将我的CUDA.obj文件链接到我的.lib,visual-studio-2010,linker,cuda,.obj,.lib,Visual Studio 2010,Linker,Cuda,.obj,.lib,因此,我们最近将我们的项目升级为使用Microsoft Visual Studio 2010,我们的CUDA项目出现了一些问题 我确实安装了2008,我使用的是vc90工具包,文件似乎正在编译(创建了它们的associate.obj文件)。这在创建.lib作为其输出的项目中。然后在另一个项目中链接.lib,该项目会产生链接器错误,因为库中的一个文件(Matrix.obj)找不到应该在CUDAMatrix.obj中的符号之一 我在CUDAMatrix.obj上运行了dumpbin/SYMBOLS,

因此,我们最近将我们的项目升级为使用Microsoft Visual Studio 2010,我们的CUDA项目出现了一些问题

我确实安装了2008,我使用的是vc90工具包,文件似乎正在编译(创建了它们的associate.obj文件)。这在创建.lib作为其输出的项目中。然后在另一个项目中链接.lib,该项目会产生链接器错误,因为库中的一个文件(Matrix.obj)找不到应该在CUDAMatrix.obj中的符号之一

我在CUDAMatrix.obj上运行了dumpbin/SYMBOLS,符号在那里,不是未定义的,是外部的。我在我们的.lib上运行了dumpbin,但符号似乎不在其中。我在以下步骤后显示了库构建的详细信息和.obj文件列表:

c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\Lib.exe 
似乎不包含CUDAMatrix.obj

总之,VisualStudio项目如何知道要将哪些.obj文件粘贴到正在生成的.lib中?我在任何地方都找不到实际的列表,图书管理员子菜单似乎也帮不上忙

或者最不方便的是,是否有一个外部工具(类似于linux上的“ar”)可以用来将它生成的.obj与库合并?我原以为lib.exe上的/MERGE开关可以做到这一点,但当我试图从命令行运行该命令时,我一直收到一个.dll not found错误

另外,dumpbins还确认.lib和.objs都是x86的目标


p.p.S.将它们作为“附加依赖项”添加到图书管理员中似乎是可行的,但是否有任何好方法可以自动实现这一点?毕竟,他们是项目的一部分。

这似乎更难,也许一些更有能力/经验的人也会回答

然而,我的第一个想法是,也许您的CUDA构建步骤没有正确地“通知”以下构建步骤它输出了哪些文件以及它们应该如何处理?因为VS2010和VS2008使用不同的构建系统,所以问题可能来自于此

我必须说,我并不完全理解新的构建系统。我使用buildin VS2008->VS2010 build rule converter(它仍然有缺陷,不支持所有内容)通过试用和错误+一些帮助创建了我的文件

在我的CUDA构建规则文件中,我有(CUDA.targets)

。。。
--编译-o“$(IntDir)%(OutputFile).cu.obj”
-cuda-o“$(IntDir)%(OutputFile).cu.c”
-gpu-o“$(IntDir)%(OutputFile).gpu”
-cubin-o“$(IntDir)%(OutputFile).cubin”
-ptx-o“$(IntDir)%(OutputFile).ptx”
...
...
$(ComputeLinkInputsTargets);
计算输出;
$(ComputeLibiInputStarGets);
计算输出;
$(IntDir)%(OutputFile).cu.obj
$(IntDir)%(OutputFile).cu.c
$(IntDir)%(OutputFile).gpu
$(IntDir)%(OutputFile).cubin
$(IntDir)%(OutputFile).ptx
我相信最后的一个节点实际上会引导后续链接阶段包含生成的.obj文件。到底是哪一个?我不知道:)

希望它能帮助。。。以某种方式祝你好运

  <Target
    Name="_SDF_CUDA"
    ...
    Outputs="@(SDF_CUDA-&gt;Metadata('Outputs')-&gt;Distinct())"
    ...
  > ... 
      <ItemGroup>
      <SDF_CUDA
        Condition="'%(SDF_CUDA.NvccCompilation)' == '0'">
        <NvccCompilationLine>--compile -o &quot;$(IntDir)%(OutputFile).cu.obj&quot;</NvccCompilationLine>
      </SDF_CUDA>
      <SDF_CUDA
        Condition="'%(SDF_CUDA.NvccCompilation)' == '1'">
        <NvccCompilationLine>-cuda -o &quot;$(IntDir)%(OutputFile).cu.c&quot;</NvccCompilationLine>
      </SDF_CUDA>
      <SDF_CUDA
        Condition="'%(SDF_CUDA.NvccCompilation)' == '2'">
        <NvccCompilationLine>-gpu -o &quot;$(IntDir)%(OutputFile).gpu&quot;</NvccCompilationLine>
      </SDF_CUDA>
      <SDF_CUDA
        Condition="'%(SDF_CUDA.NvccCompilation)' == '3'">
        <NvccCompilationLine>-cubin -o &quot;$(IntDir)%(OutputFile).cubin&quot;</NvccCompilationLine>
      </SDF_CUDA>
      <SDF_CUDA
        Condition="'%(SDF_CUDA.NvccCompilation)' == '4'">
        <NvccCompilationLine>-ptx -o &quot;$(IntDir)%(OutputFile).ptx&quot;</NvccCompilationLine>
      </SDF_CUDA>
    </ItemGroup>


...
  <SDF_CUDA
    Condition="'@(SDF_CUDA)' != '' and '%(SDF_CUDA.ExcludedFromBuild)' != 'true'"
    ...
    OutputFile="%(SDF_CUDA.OutputFile)"
    ... />
</Target>
...
  <PropertyGroup>
    <ComputeLinkInputsTargets>
            $(ComputeLinkInputsTargets);
            ComputeSDF_CUDAOutput;
          </ComputeLinkInputsTargets>
    <ComputeLibInputsTargets>
            $(ComputeLibInputsTargets);
            ComputeSDF_CUDAOutput;
          </ComputeLibInputsTargets>
  </PropertyGroup>
  <Target
    Name="ComputeSDF_CUDAOutput"
    Condition="'@(SDF_CUDA)' != ''">
    <ItemGroup>
      <SDF_CUDA Condition="'%(SDF_CUDA.NvccCompilation)' == '0'">
        <Outputs>$(IntDir)%(OutputFile).cu.obj</Outputs>
      </SDF_CUDA>
      <SDF_CUDA Condition="'%(SDF_CUDA.NvccCompilation)' == '1'">
        <Outputs>$(IntDir)%(OutputFile).cu.c</Outputs>
      </SDF_CUDA>
      <SDF_CUDA Condition="'%(SDF_CUDA.NvccCompilation)' == '2'">
        <Outputs>$(IntDir)%(OutputFile).gpu</Outputs>
      </SDF_CUDA>
      <SDF_CUDA Condition="'%(SDF_CUDA.NvccCompilation)' == '3'">
        <Outputs>$(IntDir)%(OutputFile).cubin</Outputs>
      </SDF_CUDA>
      <SDF_CUDA Condition="'%(SDF_CUDA.NvccCompilation)' == '4'">
        <Outputs>$(IntDir)%(OutputFile).ptx</Outputs>
      </SDF_CUDA>
    </ItemGroup>
    <Message Text="Outputs file: %(SDF_CUDA.Outputs)" />
    <ItemGroup>
      <SDF_CUDADirsToMake
        Condition="'@(SDF_CUDA)' != '' and '%(SDF_CUDA.ExcludedFromBuild)' != 'true'"
        Include="%(SDF_CUDA.Outputs)" />
      <Link
        Include="%(SDF_CUDADirsToMake.Identity)"
        Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
      <Lib
        Include="%(SDF_CUDADirsToMake.Identity)"
        Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
      <ImpLib
        Include="%(SDF_CUDADirsToMake.Identity)"
        Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
    </ItemGroup>
    <MakeDir
      Directories="@(SDF_CUDADirsToMake-&gt;'%(RootDir)%(Directory)')" />
  </Target>