在我的main.c中,我有:
int myvar[4] = {0,1,2,3};
int main(int argc, char *argv[])
{
...................
}
当我尝试访问另一个文件中的myvar时,如下所示:
extern int myvar[4];
if (myvar[0] == 1) do something;
当我构建它时(清理项目后),观察到错误“ LNK2001:无法解析的外部符号_myvar”和“致命错误LNK1120:1无法解析的外部”。但是,如果仅评论'if'语句,则解决方案构建良好,并且可以在调试模式下的监视窗口中观察myvar的正确值。我对为什么会这样感到困惑。任何帮助将不胜感激!
最佳答案
由于您在评论中提到用法被分为两个不同的库,因此您需要为using库(具有extern int myvar[4];
的库)建立对提供库(提供main
函数的库)的依赖关系。并声明int myvar[4]
)。
但是,这可能会导致您陷入循环依赖的问题:通常,提供main
函数的库将调用其他库中的某些函数。
如果在使用库中需要myvar
,则将其传给init
函数,该函数将被调用以初始化使用库。
假定main()
函数由lib_a
提供并且访问myvar
的库称为lib_b
的示例工作:
在lib_a
中,执行以下操作:
int main(int argc, char *argv[])
{
lib_b_init(sizeof(myvar)/sizeof(*myvar), myvar);
/* rest of your code goes here */
}
在
lib_b
中,除了已经提供的功能外,还添加以下内容:static int* g_libb_myvar = (int*) 0; /* local pointer to myvar of lib_a */
static int g_libb_myvar_size = 0; /* to note the length of the array */
/* Initializer for lib_b
*
* @param a_count number of elements held in the a_myvar array
* @param a_myvar array getting passed down by caller
* */
void lib_b_init( int a_count, int* a_myvar ) {
g_libb_myvar_size = a_count;
g_libb_myvar = a_myvar; /* now, you could use g_libb_myvar in lib_b */
}
关于c - Visual Studio C编程:无法解析的外部符号,但在监视窗口中可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23995014/