这是我第一次处理一个比简单的write-single-source-file-and-compile例程稍微复杂一点的CUDA项目.正如所料,我面临着C标题的一些问题,即重复的符号.
根据链接器,在多个.cu文件中包含以下头文件会产生冲突:
env_vars.h
#ifndef ENV_VARS_H_
#define ENV_VARS_H_
/*** GLOBAL VARIABLES ***/
unsigned int h_n_osc;
__device__ unsigned int d_n_osc;
/*** CONSTANTS ***/
const double OMEGA_0 = 6.447421494058077e+09;
/* other constants defined in the middle */
#endif
Run Code Online (Sandbox Code Playgroud)
multigpu.cu
#include "env_vars.h"
/* assigns h_n_osc */
Run Code Online (Sandbox Code Playgroud)
adm_matrix.cu
#include "env_vars.h"
/* uses h_n_osc */
Run Code Online (Sandbox Code Playgroud)
在Nsight Eclipse Edition中构建项目会导致链接器抱怨h_n_osc变量被定义两次:
duplicate symbol _h_n_osc in:
./adm_matrix.o
./multigpu.o
ld: 1 duplicate symbol for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
通过互联网搜索,我意识到将h_n_osc变量的声明移动到multigpu.cu并将其重新声明为extern变量adm_matrix.cu(以及我以后可能需要它的任何地方)解决了问题,事实上它确实存在. …