CUDA/C++ 복소수/함수 라이브러리를 만들고 있습니다. 특히, 나는 ComplexTypes.cuh
및 ComplexTypes.cu
파일에 복합 유형 int2_
, float2_
및 double2_
내 자신의 구현을 정의하고 난 다음 파일 구조가 있습니다형식 특성에 대한 정의되지 않은 참조
Result_Types.cuh - 유형의 특성은 파일 - 정의를 result_type_promotion
,
/*************/
/* PROMOTION */
/*************/
template <typename, typename> struct result_type_promotion;
....
template<> struct result_type_promotion< int2_, float2_ > { typedef float2_ strongest; };
....
/*************/
/* FUNCTIONS */
/*************/
template <typename> struct result_type_root_functions;
....
Operator_Overloads.cuh
template<typename T0, typename T1> __host__ __device__ typename result_type_promotion<T0, T1>::strongest operator+(T0, T1);
....
Operator_Overloads.cu - 복소수 간의 일반적인 작업의 과부하
#include "ComplexTypes.cuh"
#include "Result_Types.cuh"
#include "Operator_Overloads.cuh"
....
__host__ __device__ result_type_promotion<int2_,float2_>::strongest add(const int2_ a, const float2_ b) { result_type_promotion<int2_,float2_>::strongest c; c.c.x = a.c.x+b.c.x; c.c.y = a.c.y+b.c.y; return c; }
....
__host__ __device__ result_type_promotion<int2_,float2_>::strongest operator+(const int2_ a,const float2_ b) { return add(a,b); }
Function_Overloads.cuh
template<typename T0> typename result_type_root_functions<T0>::root_functions Asinh(T0);
Function_Overloads.cu - 복소수 함수의 과부하
#include "ComplexTypes.cuh"
#include "Result_Types.cuh"
#include "Operator_Overloads.cuh"
__host__ __device__ result_type_root_functions<int>::root_functions Asinh(const int a) { return asinh((float)a); }
....
포함 파일로 처리되는 형식 특성 파일을 제외하고 위의 파일은 파일을 형성하기 위해 nvcc
및 cl
을 사용하여 명령 줄에서 컴파일됩니다.
- 만 복잡한 유형을 : 나는
#include "ComplexTypes.cuh" #include "Result_Types.cuh" #include "Operator_Overloads.cuh" #include "Function_Overloads.cuh"
을 포함하는 주요 기능을 컴파일 할 때 불행하게도
, 나는
Error 247 error : Undefined reference to '_ZplIN2BB5int2_ENS0_7float2_EEN21result_type_promotionIT_T0_E9strongestES4_S5_' in '...Test.lib'
, 유의하시기 바랍니다 유형의 링크에 오류가
int2_
,float2_
및double2_
은BB
네임 스페이스이지만 모든 정의 파일에using namespace BB;
을 추가하고 있습니다. Function_Overloads.cu
파일에+
을 사용할 때 문제가 발생합니다.+
을 사용하지 않으면 문제가 발생하지 않습니다.main
함수에서 나는 놀랍게도 링크 오류를받지 않고+
을 사용할 수 있습니다.
이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?
감사합니다.billz 제안에 따라
편집
, 나는의해 디코딩
__host__ __device__ result_type_promotion<int,int2_>::strongest operator+(const int a,const int2_ b);
....
여기서'operator +'는 정의 되었습니까? – billz
@billz'Operator_Overloads.cu' 파일에서 위를 참조하십시오. – JackOLantern