Что я пытаюсь сделать?...
Сначала создайте статическую библиотеку с помощью компилятора MinGW g ++.
Итак, простыми примерами файлов являются ...
test.h
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include <iostream>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef EXPORT_DLL_FUNCT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
DLL_API void __stdcall whatever( int a, int b );
#ifdef __cplusplus
}
#endif
#endif // EXAMPLE_H
test.cpp
#include "test.h"
__stdcall void whatever( int a, int b ) {
std::cout << "whatever printout !!!" << std::endl;
int c = a + b;
}
Когда я использую команды компиляторов:
g++ -c -DEXPORT_DLL_FUNCT test.cpp -o test.o
и
g++ -shared test.o -o libtest.dll -Wl,--out-implib=libtest.a
создаются файлы "libtest.dll" и "libtest.a".Зачем нужны оба?Потому что, если вы собираетесь использовать библиотеку в проекте VS2008 (MSVC ++), необходимы оба файла - я читал об этом на сайте MinGW.
Далее ... Я создал проект консольного приложения Win2008 Win32, который будет вызывать функцию«что угодно» из библиотеки.
main.cpp
#include "../mingw/test.h"
#include <iostream>
void main(void)
{
std::cout << "\n*** start ***" << std::endl;
whatever(3, 2);
std::cout << "\n*** end ***" << std::endl;
}
В VS2008: «Свойства -> Компоновщик -> Общие -> Дополнительные каталоги библиотеки» Я добавил путь к ранее созданномуБиблиотека и в "Свойства -> Линкер -> Ввод -> Дополнительные зависимости" я добавил файл "libtest.a".Когда я собираю проект, компиляция и компоновка в порядке, файл exe генерируется, но когда я пытаюсь запустить exe ... происходит ошибка сегмента (да, "libtest.dll" находится в той же папке, что и файл .exe) !!!Я не имею понятия почему?«__stdcall» используется в коде, поэтому не должно быть проблем с переносом данных в стек ...
Есть предложения, пожалуйста?