分段故障使用可重定位设备代码编译CUDA“hello,world”

时间:2013-06-26 21:04:20

标签: cuda gnu nvcc

我正在尝试使用relocatable-device-code标志。我有一个大型项目,使用小块代码更容易维护。

我能够让项目得到编译。当试图运行它时,我遇到了严重的崩溃。使用调试器时:

(gdb) where
#0  0x0000000000000001 in ?? ()
#1  0x00007fffffffe39c in ?? ()
#2  0x0000000000000000 in ?? ()

我从未见过这样的堆栈跟踪!然后我减少了代码量,直到我得到一个奇点:main.cu文件只包含

#include <iostream>

int main(void) {
    std::cout << "hello, world" << std::endl;
    return 0;
}

哪个仍然失败。我正在使用以下标志来编译我的main.cu文件。

nvcc    -shared -rdc=true -arch=sm_20 -Xcompiler -fPIC -g -G

这些有意义吗?为什么这样一个简单的程序的分段错误?

1 个答案:

答案 0 :(得分:1)

删除-shared开关。当您尝试生成可执行文件时,该选项不适用。

来自documentation

  

在链接期间生成共享库。注意:当控制dll生成需要其他链接器选项时,请使用选项-Xlinker。