gpt4 book ai didi

c++ - 错误 LNK2001 : unresolved external symbol

转载 作者:太空宇宙 更新时间:2023-11-04 11:26:30 24 4
gpt4 key购买 nike

我在 visual studio 2010 的 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

我已阅读 Microsoft 页面 here关于 DLL 创建和链接,但不知道如何解决此外部符号错误。

谢谢!

最佳答案

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

链接的快速描述应该是这样的:

DLL 依赖项目 -> dependecy.dll + dependency.lib

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

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

在运行时,您可以选择 c 链接,它涉及通过名称查询 dll 以获取公开的仿函数/变量(困难的方法,但在您手头没有 .dll 源代码时很有用)或使用更多将生成的静态库与主库链接起来的优雅方式。

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

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

这是一个您会发现非常有用的答案: How do I build an import library (.lib) AND a DLL in Visual C++?

关于c++ - 错误 LNK2001 : unresolved external symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26494469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com