在我的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/

10-13 06:30