我有以下代码结构由一个。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 to
B::门">
我做错了什么?实际上是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
$
我只能用你所展示的来工作。