小编the*_*lad的帖子

C标题重复符号问题

这是我第一次处理一个比简单的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(以及我以后可能需要它的任何地方)解决了问题,事实上它确实存在. …

c c++ cuda header-files duplicate-symbol

2
推荐指数
1
解决办法
1306
查看次数

标签 统计

c ×1

c++ ×1

cuda ×1

duplicate-symbol ×1

header-files ×1