VS2010与extern关键字

VS2010 with extern keyword

本文关键字:关键字 extern VS2010      更新时间:2023-10-16

我有以下两个文件:

  1. foo。
  2. bar.cpp

foo.h中我声明了一个变量extern

现在,我想在bar.cpp中使用相同的变量(包括foo.h之后)。

在VS2008和VS2010下,我得到unresolved external symbol错误,而在Ubuntu与gcc编译是成功的。

(即,我试图编译以下源代码:http://www.fromdual.com/using-mysql-user-defined-functions-udf;Foo.h是指srv0srv.h, bar.cpp是指源代码。所有包含都已到位,编译成功,链接失败)

可能是什么问题?

extern关键字向编译器表明它后面的变量已经在其他地方声明过了。它实际上并不为变量分配空间。如果你想创建一个全局变量,你可以通过包含一个头文件来使用它(顺便说一下,这通常是一个坏主意),你可以用下面的方式来做。

在foo:

extern int myVar;
在foo.cpp:

int myVar;

myVar现在位于foo.cpp中,但是foo.h中的extern语句允许其他文件(如bar.cpp)中的代码通过包含foo.h来访问它。

当您使用extern声明变量(其他源对象或文件中的全局变量)时,您实际上告诉编译器在其他地方查找该变量的定义。在本例中,需要提供另一个定义int myVar的源文件。

您的变量必须在某个源文件中有一个引用。通过extern关键字,你只告诉"有一个变量",但链接器必须知道它的位置。在编译源代码时,它会为变量等创建引用。链接器将根据这些引用链接。如果没有实际创建一个变量的引用,链接器将无法找到该引用,因此会给出错误。如果你使用extern,你说不要在这里创建对这个变量或任何其他东西的引用。但必须在其他地方有一个参考。

问题是,上述符号必须从dll中导出(通过dllspec),才能从外部可见。只有extern关键字不允许从外部看到。