我正在尝试使用cuda来并行化Go项目。我读过Golang多次打电话给CUDA图书馆。
我试图在Windows上做同样的事情,但遇到了麻烦。(我假设这个OP是因为文件而使用的是Linux).so
我已经成功编译/运行了以下涉及cuda代码的测试程序,以确保我的CGO正常工作。
测试.cpp
extern "C"{
int testfunc(){
return 1000;
}
}
使用 g++ 编译
g++ test.cpp -o test.dll --shared
callC.go
package main
//int testfunc();
//#cgo LDFLAGS: -L. -ltest
import "C"
import "fmt"
func main() {
fmt.Println(C.testfunc())
}
打印 1000 - 太好了!
现在我尝试同样的事情,我从ld那里得到一个错误,有一个未定义的引用到testfunc。nvcc
test.cu
extern "C"
{
int testfunc()
{
return 1 + 1;
}
}
编译与 ...我总是得到:nvcc test.cu -o testcuda.dll --shared --compiler-options -fPIC
cl : Command line warning D9002 : ignoring unknown option '-fPIC'
cl : Command line warning D9002 : ignoring unknown option '-fPIC'
cl : Command line warning D9002 : ignoring unknown option '-fPIC'
Creating library testcuda.lib and object testcuda.exp
callCudaC.go
package main
//int testfunc();
//#cgo LDFLAGS: -L. -ltestcuda
//#cgo LDFLAGS: -LC:\temppath\CUDA\v11.2\ -lcudart
import "C"
import "fmt"
func main() {
fmt.Println(C.testfunc())
}
运行此 go 代码的结果
C:\Users\MICHAE~1\AppData\Local\Temp\go-build045526290\b001\_x002.o: In function `_cgo_701f531a6502_Cfunc_testfunc': /tmp/go-build/cgo-gcc-prolog:52: undefined reference to `testfunc' collect2.exe: error: ld returned 1 exit status
你会注意到我的“cuda”代码不涉及任何cuda,只涉及一个导出的函数,并且我尝试将cuda安装移动到一个更简单的路径,所以我实际上可以将其作为目录传递给链接器 - 我不确定它是否需要,因为没有使用cuda语法等。
如果有人以前见过这个,将不胜感激调试提示或提示。
米脂
相关分类