Создание DLL в GCC или Cygwin? - PullRequest
12 голосов
/ 17 июля 2011

Мне нужна помощь для компиляции скрипта ("iterator.c") в DLL.Я не могу использовать VS2010, поскольку он не поддерживает функции, добавленные в C в стандарте C99 (я использую "complex.h", но VB не поддерживает его).

Я искал замену, но все, что я нашел, это GCC, который я не знаю, как установить / использовать (на самом деле, я потратил около получаса на чтение документации, и ядаже не понимаю, как я должен установить его) и Cygwin, который я уже установил, но я не знаю, как использовать.Кроме того, я установил MinGW, но я думаю, что он более или менее похож на Cygwin, и я до сих пор не знаю, как сделать DLL.Я даже не пробовал, просто эти компиляторы совсем не похожи на те, что я когда-либо использовал (в основном Python IDLE и Visual Studio, которые облегчают вам задачу).Я немного растерялся.

Может ли кто-нибудь дать мне несколько советов о том, как использовать эти инструменты для создания библиотеки DLL, к которой я могу получить доступ из другого скрипта?Это действительно важно.

Заранее спасибо.

1 Ответ

14 голосов
/ 17 июля 2011

Вы должны поместить __declspec (dllexport) перед методом, который вы хотите экспортировать, например, вы можете # определить это, чтобы максимально упростить его

EXPORT_DLL void hello() { ... }

Для компиляции dll используйте

gcc -c -mno-cygwin mydll.c
gcc -shared -o mydll.dll mydll.o -Wl,--out-implib,libmylib.dll.a

затем прикрепить

gcc -o myexe.exe test.o mydll.dll

РЕДАКТИРОВАТЬ: Забыл самый важный кусок, вам нужно сделать файл mydll.h, чтобы включить определение вашего метода, чтобы компилятор знал, чтобы зарезервировать место для компоновщика для заполнения позже. Это так же просто, как

#ifndef MYDLL_H
#define MYDLL_H

extern "C" __declspec(dllexport)
#define EXPORT_DLL __declspec(dllexport)

EXPORT_DLL void hello();

#endif
...