Я пытаюсь скомпилировать DLL в Eclipse, используя MinGW и вызывая функцию из этой DLL в другой программе (Uniplot).
Я написал тестовую программу после этого урока: http://www.mingw.org/wiki/sampledll
example.cpp:
#include "stdio.h"
#include "example.h"
#include <iostream>
#include <algorithm>
using namespace std;
void sortfunct(int in1, int in2,int in3,int in4,int in5)
{
int temp1;
int arr[] = {in1,in2,in3,in4,in5};
std::sort(arr, arr + 5);
cout << "Elements sorted successfully \n";
cout << "Sorted list in ascending order \n";
for (temp1=0; temp1 < 5; temp1++) {
std::cout << arr[temp1] << "\n";
}
}
example.h:
#ifndef EXAMPLE_H
#define EXAMPLE_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef BUILDING_EXAMPLE
#define EXAMPLE_DLL __declspec(dllexport)
#else
#define EXAMPLE_DLL __declspec(dllimport)
#endif
void EXAMPLE_DLL sortfunct(int in1, int in2,int in3,int in4,int in5);
#ifdef __cplusplus
}
#endif
#endif /* EXAMPLE_DLL_H_ */
Следуя инструкции, я поместил следующие строки в команды сборки проекта:
GCC C ++ Compiler
g++ -O3 -Wall -c -DBUILDING_EXAMPLE example.cpp
MinGW C ++ Linker
g++ -o libexample.dll example.o -shared -Wl,--out-implib=libexample.a
(имена файлов были изменены)
Eclipse скомпилирует это без каких-либо ошибок, хотя отладка и выпускпапка пуста.Выходных данных .dll нет.
Я заметил, что если я изменю команду сборки компилятора GCC на:
g++ -O3 -Wall -c -DBUILDING_EXAMPLE
Eclipse выдаст мне ошибки в example.cpp:
first defined here
multiple definition of 'sortfunct'
Eclipse выводит следующие файлы: example.o.
Я довольно перегружен всем процессом связывания и экспорта / импорта объявлений.Я надеюсь, что это будет сделано в учебнике.Все библиотеки DLL, которые я скомпилировал, прежде чем следовать руководству, также не работали.Uniplot не смог найти функцию в DLL, что, по-моему, является проблемой, которую должно решить учебное пособие.
Если у кого-то есть представление о том, что я делаю неправильно, дайте мне знать.Любая форма помощи приветствуется.