Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2016, 19:18   #1
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
Печаль Гонит линковщик. LNK1120. VC++

Имеется Areas.dll библиотека, написанная мной же.
Вот несколько функций, реализованных в ней.
Код:
AREAS_API double trgar(double a, double b)
{
	double ans = a*b*0.5;
	return ans;
}

AREAS_API double cirar(double r)
{
	double ans = pi*r*r;
	return ans;
}
И имеется приложение MFC, где должна использоваться библиотека.
Подключена верно: проект функции видит, но при компиляции получаю ошибку ликовщика на всех функциях. Что я делаю не так?
Обработчик событий, где используются функции:
Код:
void CMFCApplication1Dlg::OnBnClickedButton1()
{
	WCHAR *Buff = new WCHAR[100];
	WCHAR *Buff2 = new WCHAR[100];
	double a,b,Ans;
	switch (ard)
	{
	case 0:
		GetDlgItemText(IDC_EDIT3,Buff,100);
		a = _wtof(Buff);
		Ans = cirar(a);
		break;
	case 1:
		GetDlgItemText(IDC_EDIT1,Buff,100);
		GetDlgItemText(IDC_EDIT3,Buff2,100);
		b = _wtof(Buff2);
		a = _wtof(Buff);
		Ans = parar(a,b);
		break;
	case 2:
		GetDlgItemText(IDC_EDIT1,Buff,100);
		GetDlgItemText(IDC_EDIT2,Buff2,100);
		a = _wtof(Buff);
		b = _wtof(Buff2);
		Ans = rtgar(a,b);
		break;
	case 3:
		GetDlgItemText(IDC_EDIT1,Buff,100);
		GetDlgItemText(IDC_EDIT4,Buff2,100);
		a = _wtof(Buff);
		b = _wtof(Buff2);
		Ans = trgar(a,b);
		break;
	}
	
	delete Buff;
	delete Buff2;
}
Хидер файла библиотеки
Код:
#ifdef AREAS_EXPORTS
#define AREAS_API __declspec(dllexport)
#else
#define AREAS_API __declspec(dllimport)
#endif

AREAS_API double trgar(double a, double b);

AREAS_API double cirar(double r);

AREAS_API double rtgar(double a, double b);

AREAS_API double parar(double a, double h);
И коды ошибок:
Код:
1>MFCApplication1Dlg.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы "__declspec(dllimport) double __cdecl trgar(double,double)" (__imp_?trgar@@YANNN@Z) т ЇєэъЎшш "public: void __thiscall CMFCApplication1Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMFCApplication1Dlg@@QAEXXZ)
1>MFCApplication1Dlg.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы "__declspec(dllimport) double __cdecl cirar(double)" (__imp_?cirar@@YANN@Z) т ЇєэъЎшш "public: void __thiscall CMFCApplication1Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMFCApplication1Dlg@@QAEXXZ)
1>MFCApplication1Dlg.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы "__declspec(dllimport) double __cdecl rtgar(double,double)" (__imp_?rtgar@@YANNN@Z) т ЇєэъЎшш "public: void __thiscall CMFCApplication1Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMFCApplication1Dlg@@QAEXXZ)
1>MFCApplication1Dlg.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы "__declspec(dllimport) double __cdecl parar(double,double)" (__imp_?parar@@YANNN@Z) т ЇєэъЎшш "public: void __thiscall CMFCApplication1Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMFCApplication1Dlg@@QAEXXZ)
fatal error LNK1120: эхЁрчЁх°хээ√ї тэх°эшї ¤ыхьхэЄют: 4
Girei вне форума Ответить с цитированием
Старый 20.03.2016, 00:34   #2
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

В параметрах линковщика библиотеку указали?
А то многие считают, что директива #include <header> подключает библиотеки )))

При компиляции библиотеки необходимо определить AREAS_EXPORTS.
При компиляции приложения, AREAS_EXPORTS не должен быть определен.

Ну и собираться всё это добро должно одним компилятором,
иначе нужно будет extern "C", дабы с именами проблем меньше было.
Croessmah вне форума Ответить с цитированием
Старый 20.03.2016, 02:31   #3
Girei
Пользователь
 
Аватар для Girei
 
Регистрация: 22.10.2013
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
В параметрах линковщика библиотеку указали?
А то многие считают, что директива #include <header> подключает библиотеки )))

При компиляции библиотеки необходимо определить AREAS_EXPORTS.
При компиляции приложения, AREAS_EXPORTS не должен быть определен.

Ну и собираться всё это добро должно одним компилятором,
иначе нужно будет extern "C", дабы с именами проблем меньше было.
Кхм.... болван. Каюсь. Вообще вылетело из головы. Проблема, вроде, решилась, как в доп. зависимости добавил. Если уж такой разговор пошёл - почему включение библиотек в VC++ - такой муторный процесс? Зачем вообще .lib нам нужен и такое сложное подключение? Куда нужно гуглить?
Girei вне форума Ответить с цитированием
Старый 20.03.2016, 03:21   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Если уж такой разговор пошёл - почему включение библиотек в VC++ - такой муторный процесс?
В чем муторность? Просто указали линковщику, также как и везде.

Цитата:
Зачем вообще .lib нам нужен и такое сложное подключение?
А откуда линковщик узнает, что такое мОяСУперКруТАЯФУНкция? Что сложного в указание библиотеки в параметрах линковщика?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка LNK2001 и LNK1120 Сеня2 Visual C++ 1 16.04.2012 07:06
Екзель гонит, все сбилось в левый нижний угол SimSima Microsoft Office Excel 17 03.11.2010 10:38