Компиляция DLL с MinGW и вызывающая функция в Uniplot (Eclipse C ++) - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь скомпилировать 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, что, по-моему, является проблемой, которую должно решить учебное пособие.

Если у кого-то есть представление о том, что я делаю неправильно, дайте мне знать.Любая форма помощи приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...