我有一个主代码,使用了一些库,我一直像这样编译它:
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´使用了在´importedCFile2.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代码标志,例如-rt、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()函数,它将正常工作。
extern "C" {#include ... }
内部。否则,函数名称将按照 C++ 规则进行混淆。 - teraextern int *getVector(int n); // 这是´mainCode.cu´中的一个函数 extern int iRand(int high); // 这是´importedCFile2.c´中的一个函数
- user3117891