代码之家  ›  专栏  ›  技术社区  ›  alexgolec

NVCC拒绝链接我的对象文件

  •  0
  • alexgolec  · 技术社区  · 16 年前

    hello.o : hello.h hello.cu
        nvcc hello.cu -c -o hello.o
    #...
    main.o : $(objs)
        nvcc *.o -o exec
    

    当我进入链接阶段时,几乎每个方法都会显示为丢失和未声明,尽管nm显示每个方法实际上都位于我的对象文件中,并且它们的名称是不混叠的。这是怎么回事?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Edric    16 年前

    你的期末考试 make

    exec : $(objs)
        nvcc $(objs) -o $@
    

    您可能还需要将CUDA库添加到命令行(我认为 nvcc .cu 直接归档,但如果你把它交给 .o 文件)。所以,更像这样:

    exec : $(objs)
        nvcc $(objs) -o $@ -lcuda -lcudart -lcublas
    

    (具体需要哪些库取决于代码)

        2
  •  0
  •   alexgolec    16 年前

    好吧,所以我的问题表述不正确。事实上,问题是我是这样编译C代码的:

    hello.o : hello.h hello.cu
        nvcc hello.c -c -o hello.o
    #...
    main.o : $(objs)
        nvcc *.o -o exec
    

    这导致nvcc将.c文件传递给gcc。当我用“nm*.o”作为我的方法的名称时,我发现gcc发出的对象文件的名称是非混合的,而由g++编译的.cu文件的名称是损坏的。

    我的解决方案是将项目中的所有.c文件重命名为.cu,尽管我认为(但尚未测试)将它们保留为.c并在makefile中显式调用g++就足够了。

        3
  •  0
  •   N. Pattakos    15 年前

    我试着调用g++但是仍然得到同样的错误。答案就在这里:

    http://forums.nvidia.com/index.php?showtopic=190973&st=0&gopid=1179661&#entry1179661