如何在c++和CUDA中使用extern声明/定义全局变量



我有以下代码结构由一个。cpp,一个。cu和一个。hxx组成

UTILITIES.hxx

#ifndef UTILITIES_HXX
#define UTILITIES_HXX
namespace B{
extern int doors;
}

FILE2.cu

#include "utilities.hxx"
namespace A {
int foo (){
switch(B::doors){
//do something
}
}
}

FILE3.cxx

#include "utilities.hxx"
namespace B{
int doors=-1;
class Vehicle{
public:
void operation() {
doors++;
A::foo();
doors++;
A::foo();
}
}
}

我在头文件中将doors变量声明为extern,并在.cxx文件中定义它。所以在那之后,第二个。cpp应该能够使用它。然而,当链接时,我得到以下错误:

/usr/bin/ld: . ./src/libapp.a (FILE2.cu.o):在函数A::foo(void)': /MYPATH/FILE2.cu:19: undefined reference toB::门">

我做错了什么?实际上是FILE2中的foo函数。cu是一个普通的c++函数,根本不涉及CUDA。

缺少#endif,缺少return语句,没有A::foo()的原型,缺少分号

这些改变似乎对我有用:

$ cat utilities.hxx
#ifndef UTILITIES_HXX
#define UTILITIES_HXX
namespace B{
extern int doors;
}
#endif
$ cat file2.h
namespace A {
int foo ();
}
$ cat file2.cu
#include "utilities.hxx"
namespace A {
int foo (){
switch(B::doors){
//do something
}
return 0;
}
}
$ cat file3.cpp
#include "utilities.hxx"
#include "file2.h"
namespace B{
int doors=-1;
class Vehicle{
public:
void operation() {
doors++;
A::foo();
doors++;
A::foo();
}
};
}
$ nvcc -shared file2.cu file3.cpp -Xcompiler -fPIC
$ nvcc -lib file2.cu file3.cpp 
$ 

我只能用你所展示的来工作。

相关内容

  • 没有找到相关文章

最新更新