Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GCC或Cygwin中创建DLL?_C_Gcc_Dll_Compiler Construction_C99 - Fatal编程技术网

在GCC或Cygwin中创建DLL?

在GCC或Cygwin中创建DLL?,c,gcc,dll,compiler-construction,c99,C,Gcc,Dll,Compiler Construction,C99,我需要帮助将脚本(“iterator.c”)编译成DLL。我不能使用VS2010,因为它不支持C99标准中添加到C中的功能(我使用“complex.h”,但VB不支持) 我一直在寻找替代品,但我发现的只是GCC,我不知道如何安装/使用(真的,我花了半个小时阅读文档,甚至不知道如何安装),还有Cygwin,我已经安装了,但我也不知道如何使用。另外,我已经安装了MinGW,但我认为它或多或少与Cygwin相同,而且我仍然不知道如何创建DLL 这并不是说我一直都很懒,甚至没有尝试过,只是这些编译器不像

我需要帮助将脚本(“iterator.c”)编译成DLL。我不能使用VS2010,因为它不支持C99标准中添加到C中的功能(我使用“complex.h”,但VB不支持)

我一直在寻找替代品,但我发现的只是GCC,我不知道如何安装/使用(真的,我花了半个小时阅读文档,甚至不知道如何安装),还有Cygwin,我已经安装了,但我也不知道如何使用。另外,我已经安装了MinGW,但我认为它或多或少与Cygwin相同,而且我仍然不知道如何创建DLL

这并不是说我一直都很懒,甚至没有尝试过,只是这些编译器不像我以前使用过的任何编译器(主要是pythonidle和visualstudio,它们让事情变得非常简单)。我有点迷路了

有人可以给我一些建议,如何使用这个工具,使DLL,我可以从另一个脚本访问?这真的很重要

提前感谢。

您必须将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

这不是
\uuuu declspec
不是
\uuu delspec
?extern“C”\uuuu declspec(dllexport)感谢大家在编写动态文件时发现了这个错误。如果你在cygwin的gcc上尝试这个方法,你会得到与cygwin1.DLL链接的DLL,如果EXE没有,那就是谋杀。使用-m-no-cygwin(或者是-mno-cygwin)作为gcc的一个选项来避免这种情况。
-mno-cygwin
是正确的,cygwin和MinGW链接器都支持此选项,即使它对于独立的MinGW安装是多余的,因为MinGW是默认目标而不是cygwin。