Связывание с библиотекой Visual Studio Dynami c - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать динамическую c библиотеку и использовать ее в консольном приложении. Библиотека 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);

Это функции, которые я пытаюсь экспортировать и которые считаются неразрешенными внешними символами

EDIT Я попытался использовать инструменты разработчика VS, используя dumpbin /EXPORTS MultiSite.lib, и все мои функции там

Using Visual Studio cmd

Ответы [ 3 ]

0 голосов
/ 06 мая 2020

"В независимом проекте я добавил библиотеку в Linker> Input> Additional Dependencies и добавил каталоги заголовков"

Насколько я понимаю, в проекте отсутствует MultiSite.lib. Я предлагаю вам добавить путь к файлу .lib в каталоги дополнительных библиотек (свойство -> компоновщик -> Общие -> каталоги дополнительных библиотек).

0 голосов
/ 06 мая 2020

Проблема заключалась в использовании 64-битной библиотеки в 32-битном приложении. Вот почему он работал нормально, когда я добавил его в то же решение, но не в свой независимый проект. две одинаковые библиотеки с разной конфигурацией бит.

Следовательно, это объясняет unresolved external symbol ошибку, с которой я столкнулся

0 голосов
/ 05 мая 2020

Заголовок не содержит строки magi c, необходимой для того, чтобы Visual Studio связала нужную библиотеку. Это #pragma comment(lib, "MultiSite.lib"). Он идет после #define MATHLIBRARY_API extern "C" __declspec(dllimport).

В качестве альтернативы вы действительно можете напрямую указать компоновщику, что MultiSite.lib является дополнительным вводом. См. Страницы свойств компоновщика Visual Studio вашего исполняемого проекта.

...