C++ 错误LNK2001:未解析的外部符号
我在VisualStudio2010的sln文件中有两个VC++项目。我想在另一个项目的文件中使用一个_标志,这可能是我下面要做的吗 项目1: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_
**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)
,以便导出。你删除了那部分。