Хорошо, вот проблема.Пытаясь расширить свои знания API C ++, я попытался узнать больше о типах библиотечных файлов.У меня статические библиотеки разобрались довольно хорошо.Вы просто связываете библиотеку с проектом, и ее содержимое помещается в двоичные файлы, когда она компилируется и связывается.Но я столкнулся с проблемой, когда начал пытаться использовать динамические библиотеки.Мне удалось успешно скомпилировать файл DLL с помощью функции __declspec и создать внешние блоки (так что он может быть успешно экспортирован в C ++).Но проблема возникает, когда я пытаюсь связать файл.Основываясь на нескольких учебных пособиях, которые я видел в Интернете, я создаю заголовок с прямыми определениями и включаю его в исполняемый проект.Затем я добавляю каталог поиска в настройки сборки проекта вместе с путем к библиотеке, которую я импортирую.Затем, когда я собираюсь построить проект, он выдает ошибку компоновщика (я могу сказать, что объектный файл скомпилирован) "не может найти -l [путь к файлу]".Есть ли еще конфигурации?Я предполагаю, что это как-то связано с моим компилятором (MinGW), потому что Code :: Blocks (в настоящее время я использую плагин Eclipse CDT) выдает похожую ошибку ссылки.
Если вам нужно увидеть код,Я предоставлю это ниже.
// EXE: main.cpp
#include <iostream>
#include "DLLTutorial.h"
int main()
{
Function();
std::cout << "1 + 3:\t" << Add(1, 3);
}
// DLL: DLLTutorial.cpp
#define DLL_EXPORT
#include <iostream>
#include "DLLTutorial.h"
extern "C"
{
DLLCOMP int Add(int a, int b)
{
return a + b;
};
DLLCOMP void Function(void)
{
std::cout << "DLL Called!\n";
};
};
// DLL: DLLTutorial.h
#ifndef DLLTUTORIAL_H_
#define DLLTUTORIAL_H_
#include <iostream>
#ifdef DLL_EXPORT
#define DLLCOMP __declspec(dllexport)
#else
#define DLLCOMP __declspec(dllimport)
#endif
extern "C"
{
DLLCOMP int Add(int a, int b);
DLLCOMP void Function(void);
};
#endif /* DLLTUTORIAL_H_ */
Это просто очень простой пример кода, который я использовал с веб-сайта.Я не могу заставить исполняемый файл правильно ссылаться, поэтому буду признателен за любые советы, которые мне могут быть даны.
Кроме того, у меня есть связанный вопрос.Читая несколько онлайн-руководств, некоторые упоминали, что функция __declspec специфична для Windows / Microsoft.Это правда?В каком случае, что было бы хорошим эквивалентом для использования в других операционных системах?