C++ 错误LNK2001:未解析的外部符号

C++ 错误LNK2001:未解析的外部符号,c++,visual-studio-2010,dynamic-linking,C++,Visual Studio 2010,Dynamic Linking,我在VisualStudio2010的sln文件中有两个VC++项目。我想在另一个项目的文件中使用一个_标志,这可能是我下面要做的吗 项目1: **sample_header.h** #ifndef SAMPLE_HEADER_API #define SAMPLE_HEADER_API __declspec(dllimport) #endif extern SAMPLE_HEADER_API int a_flg; **file1.cpp** #define SAMPLE_HEADER_

我在VisualStudio2010的sln文件中有两个VC++项目。我想在另一个项目的文件中使用一个_标志,这可能是我下面要做的吗

项目1:

**sample_header.h**


#ifndef SAMPLE_HEADER_API
#define SAMPLE_HEADER_API __declspec(dllimport) 
#endif
 extern SAMPLE_HEADER_API int a_flg;

**file1.cpp**
#define SAMPLE_HEADER_API __declspec(dllexport)
#include "sample_header.h"

// Intialization of external
int a_flag = 15;

void m_func()
{
  int i = 0;
}
**file2.h**
 #include <stdio.h>

**file2.cpp**
 #include "file1.h"
 #include "sample_header.h"

 //  provided path of "sample_header.h" in additional include directory as well

void main()
{
   if(a_flag > 0)
   {
     std::cout << "FLAG"  ;
   }
}          
项目2:

**sample_header.h**


#ifndef SAMPLE_HEADER_API
#define SAMPLE_HEADER_API __declspec(dllimport) 
#endif
 extern SAMPLE_HEADER_API int a_flg;

**file1.cpp**
#define SAMPLE_HEADER_API __declspec(dllexport)
#include "sample_header.h"

// Intialization of external
int a_flag = 15;

void m_func()
{
  int i = 0;
}
**file2.h**
 #include <stdio.h>

**file2.cpp**
 #include "file1.h"
 #include "sample_header.h"

 //  provided path of "sample_header.h" in additional include directory as well

void main()
{
   if(a_flag > 0)
   {
     std::cout << "FLAG"  ;
   }
}          
我已经阅读了有关DLL创建和链接的Microsoft页面,但不知道如何解决此外部符号错误


谢谢

您需要将创建.dll的项目设置为同时生成.lib文件(导入库)

链接的快速描述应如下所示:

DLL依赖项项目->Dependency.DLL+Dependency.lib

主项目->在运行时依赖于dependency.dll,在链接时依赖于dependency.lib

换句话说,您的.dll只是另一个公开某些函数签名的二进制文件

在运行时,您可以选择c链接,其中包括通过名称查询dll中公开的函子/变量(这很难,但在手头没有.dll源代码时很有用),或者使用更优雅的方式将生成的静态库链接到主库

使用第1种方法时,如果找不到某个.dll,则需要在代码内部处理

当使用第二种方法时,当您尝试运行二进制文件时,它将知道它依赖于某个.dll

以下是一个非常有用的答案:

是否将应用程序链接到使用dll生成的导入库?同时获取
extern SAMPLE\u HEADER\u API int a\u flg从ifdef中导出,因此它被导出到dll中。听起来好像您忘记了将Project1中的
.lib
添加到Project2的链接行。@RSahu+1我认为这正是问题所在。这是一个visual studio,有几种方法可以解决,但我相信只要将其设置为依赖项,它就应该处理它。
SAMPLE\u HEADER\u API
仍然应该定义为
\u declspec(dllexport)
,以便导出。你删除了那部分。