我试图创建一个动态库,并在一个控制台应用程序中使用它。这个库是 Multisite.lib
.
我的问题是,当我将项目添加为引用并添加头文件目录时,它工作得很好,然而,当我试图在一个独立的项目中使用这个库时,我得到的是 unresolved external symbol
错误。
在独立项目中,我所做的是将库添加到了 Linker >Input >额外的依赖性。 并添加头目录
#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);
这些是我试图导出的函数,它们被认为是未解析的外部符号。
编辑我试着使用VS开发工具,使用 dumpbin /EXPORTS MultiSite.lib
我所有的功能都在那里
头文件不包含使Visual Studio链接正确的库所需的神奇行。那是 #pragma comment(lib, "MultiSite.lib")
. 它的目标是 #define MATHLIBRARY_API extern "C" __declspec(dllimport)
.
或者,你确实可以直接告诉链接器说 MultiSite.lib
是一个额外的输入。请看你的可执行项目的Visual Studio链接器属性页。
"我在独立项目中做的是将库添加到链接器>输入>附加依赖中,并添加头目录"
在我看来,这个项目缺乏的是 MultiSite.lib
. 我建议你应该将.lib文件的路径添加到附加库目录中(property -> linker -> General -> Additional Library Directories)。
问题是使用了一个 64位 库上 三十二位 这就是为什么当我把它添加到同一个解决方案中时,它能正常工作,但在我的独立项目中却不能。
我曾经以为visual studio可以检测到错误的格式,但事实证明,只是导出的符号名称在两个不同位配置的库之间发生了变化。
因此,这就解释了 unresolved external symbol
遇到的错误