链接到 visual studio 个动态库

Linking to visual studio dynamic library

我正在尝试创建动态库并在控制台应用程序中使用它。图书馆是 Multisite.lib.

我的问题是,当我将项目添加为引用并添加头文件目录时,它运行良好,但是,当我尝试在独立项目中使用该库时,出现 unresolved external symbol 错误。

我在独立项目中所做的是将库添加到 Linker > Input > Additional Dependencies 并添加头目录

#pragma once

#ifndef MultiSite_IMPORTS
#define MATHLIBRARY_API extern "C"  __declspec(dllexport)
#else
#define MATHLIBRARY_API extern "C" __declspec(dllimport)
#endif
#define STACKMODE   __stdcall

#include <string>

struct interfaceManager;

MATHLIBRARY_API interfaceManager* STACKMODE createInstance();

MATHLIBRARY_API void STACKMODE bert_init(interfaceManager * inst , int bid);

MATHLIBRARY_API bool STACKMODE bert_connect(interfaceManager * inst, std::string IP);

这些是我要导出的函数,它们被认为是未解析的外部符号

编辑 我尝试使用 dumpbin /EXPORTS MultiSite.lib 使用 VS 开发人员工具,我的所有功能都在那里

header 不包含使 Visual Studio link 成为正确的库所需的魔法线。那是 #pragma comment(lib, "MultiSite.lib")。它在 #define MATHLIBRARY_API extern "C" __declspec(dllimport).

之后

或者,您确实可以直接告诉 linker MultiSite.lib 是一个额外的输入。请参阅可执行项目的 Visual Studio linker 属性 页。

"What I did in the independent project is to add the library to the Linker > Input > Additional Dependencies and add the header directories"

据我所知,该项目缺少MultiSite.lib。我建议您应该将 .lib 文件的路径添加到附加库目录(属性 -> 链接器 -> 常规 -> 附加库目录)。

问题是在 32 位 应用程序上使用 64 位 库。 这就是为什么当我将它添加到同一个解决方案而不是我的独立项目时它工作正常的原因。

我曾经认为 visual studio 可以检测到错误的格式,但事实证明,只是导出符号的名称在两个具有不同位配置的相同库之间发生了变化。

因此这解释了我遇到的 unresolved external symbol 错误