我有一个使用一些库的主代码,我一直在编译它:
gcc importedCFile1.c importedCFile2.c mainCode.c -O3 -lm -Wall -o maincode -lrt
现在我在mainCode中添加了CUDA代码并将其扩展名更改为.cu ...那么,如何编译整个内容呢?
我试过了:
nvcc importedCFile1.c importedCFile2.c mainCode.cu -o maincode
但我在导入的C文件中对我的函数有很多“未定义的引用”。
要包含我正在使用的C文件:
extern "C" {
#include "importedCFile1.h"
#include "importedCFile2.h"
}
'importedCFile1.c'正在使用'importMile2.c'和'mainCode.cu'中声明的一些函数和变量。像这样:
extern int **se; // Variables from mainCode
extern int *n;
extern int numNodes;
extern int *getVector(int n); // Function from mainCode
extern int iRand(int high); // Function from importedCFile2
此函数是未定义引用的原因。我该怎么办?
另外,如何添加C代码所需的标记,例如-lrt
,O3
,lm
和Wall
??
https://github.com/mvnarvaezt/cuda/tree/master/minimalExample
如果使用gcc编译mainCode.c和importedCFile.c,它可以正常工作。如果使用nvcc编译mainCode.cu和importedCFile.c,您将获得对anExample()(importedCFile.c中的函数)的未定义引用。
您评论导入importedCFile.c的标头以及对它可以找到的anExampled()函数的调用。
答案 0 :(得分:1)
你的问题是importFile.c中的C代码试图在mainCode.cu中回调C ++函数。
为了从C调用,C ++函数必须具有C链接。将getVector()
声明为
extern "C" int *getVector(int n) {
在mainCode.cu中,您的示例将编译正常。