链接到visual studio动态库

问题描述 投票:0回答:1

我试图创建一个动态库,并在一个控制台应用程序中使用它。这个库是 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 我所有的功能都在那里

Using Visual Studio cmd

c++ visual-studio visual-studio-2015 dynamic-linking
1个回答
0
投票

头文件不包含使Visual Studio链接正确的库所需的神奇行。那是 #pragma comment(lib, "MultiSite.lib"). 它的目标是 #define MATHLIBRARY_API extern "C" __declspec(dllimport).

或者,你确实可以直接告诉链接器说 MultiSite.lib 是一个额外的输入。请看你的可执行项目的Visual Studio链接器属性页。


0
投票

"我在独立项目中做的是将库添加到链接器>输入>附加依赖中,并添加头目录"

在我看来,这个项目缺乏的是 MultiSite.lib. 我建议你应该将.lib文件的路径添加到附加库目录中(property -> linker -> General -> Additional Library Directories)。


0
投票

问题是使用了一个 64位 库上 三十二位 这就是为什么当我把它添加到同一个解决方案中时,它能正常工作,但在我的独立项目中却不能。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.