首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CUDA静态或共享库链接到gcc时出现未定义的引用错误

将CUDA静态或共享库链接到gcc时出现未定义的引用错误
EN

Stack Overflow用户
提问于 2013-01-20 13:16:01
回答 2查看 3.3K关注 0票数 8

gcc与CUDA问题

嗨,

我编译了一个CUDA共享库,但无法将它与使用它的主程序链接起来。我正在和gcc一起编写主程序。

代码:

simplemain.c

代码语言:javascript
复制
    #include <stdio.h>
    #include <stdlib.h>



    void fcudadriver();

    int main()
    {
      printf("Main \n");
      fcudadriver();
      return 0;
    }

test.cu

代码语言:javascript
复制
    __global__ void fcuda()
    {
    }

    void fcudadriver()
    {
      fcuda<<<1,1>>>();
    }

我将test.cu编译为-->它可以工作

代码语言:javascript
复制
    nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu

我将simplemain.c编译为->它给出错误:(

代码语言:javascript
复制
    gcc simplemain.c -L. -ltest
    /tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver'
    collect2: ld returned 1 exit status
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 13:51:06

试试用g++代替gcc吧。nvcc使用c++样式链接约定。(您不需要重命名任何文件。)

或者,如果您必须使用gcc,请在您的void fcudadriver()函数定义前添加如下内容:

代码语言:javascript
复制
extern "C" void fcudadriver()
票数 2
EN

Stack Overflow用户

发布于 2013-01-20 13:45:11

C和C++以不同的方式命名函数。

由于nvcc将.cu文件中的CPU代码视为C++,因此您可以将simplemain.c重命名为simplemain.cpp,并使用g++编译它

另一种解决方案是在.cu文件中的函数定义之前添加extern "C"

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14421898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档