在GCC或Cygwin中创建DLL?
我需要帮助将脚本(“iterator.c”)编译成DLL。我不能使用VS2010,因为它不支持C99标准中添加到C中的功能(我使用“complex.h”,但VB不支持) 我一直在寻找替代品,但我发现的只是GCC,我不知道如何安装/使用(真的,我花了半个小时阅读文档,甚至不知道如何安装),还有Cygwin,我已经安装了,但我也不知道如何使用。另外,我已经安装了MinGW,但我认为它或多或少与Cygwin相同,而且我仍然不知道如何创建DLL 这并不是说我一直都很懒,甚至没有尝试过,只是这些编译器不像我以前使用过的任何编译器(主要是pythonidle和visualstudio,它们让事情变得非常简单)。我有点迷路了 有人可以给我一些建议,如何使用这个工具,使DLL,我可以从另一个脚本访问?这真的很重要 提前感谢。您必须将declspec(dllexport)放在您希望导出的方法前面,例如,您可以定义它以使其更容易在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 这并不是说我一直都很懒,甚至没有尝试过,只是这些编译器不像
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。