错误LNK2001:未解析的外部符号
error LNK2001: unresolved external symbol
visualstudio2010中的sln文件中有两个VC++项目。我想在另一个项目的文件中使用a_flag,这可能是我在下面做的吗?
项目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;
}
项目2:
**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" ;
}
}
我将project1设置为DLL,将project2设置为EXE项目。
在链接中,我得到了这个错误:
error LNK2001: `unresolved external symbol "__declspec(dllimport) int a_flg" (__imp_?a_flg@@3HA)` in file2.cpp
我已经阅读了微软关于DLL创建和链接的页面,但不知道如何解决这个外部符号错误。
谢谢!
您需要设置创建.dll的项目,以同时生成.lib文件(导入库)。
链接的快速描述应该是这样的:
DLL依赖项目->Dependency.DLL+Dependency.lib
主项目->在运行时依赖depedency.dll,在链接时依赖dependency.lib.
换句话说,你的.dll只是另一个公开一些函数签名的二进制文件。
在运行时,您可以选择c链接,该链接涉及通过名称在dll中查询公开的函子/变量(这是一种很难的方法,但在手头没有.dll源代码时很有用),或者使用一种更优雅的方法将生成的静态库与main链接。
当使用第一种方法时,如果找不到特定的.dll,则需要处理代码内部。
当使用第二种方法时,当您尝试运行二进制文件时,它将知道它依赖于某个.dll。
以下是一个非常有用的答案:如何在Visual C++中构建导入库(.lib)和DLL?
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector