在 GCC 或 Cygwin 中创建 DLL?

标签 c gcc dll compiler-construction c99

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

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

这并不是说我一直很懒惰甚至没有尝试过,只是这些编译器与我以前使用过的任何东西都不一样(主要是 Python IDLE 和 Visual Studio,它们使事情变得非常容易你)。我有点迷路了。

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

提前谢谢你。

最佳答案

您必须将 __declspec(dllexport) 放在您希望导出的方法前面,例如,您可以 #define this to max it easier

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

关于在 GCC 或 Cygwin 中创建 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6721364/

相关文章:

编译错误 - sysdeps/i386/elf/start.S 和对 main 的 undefined reference

c++ - 在不破坏任何东西的情况下使用 OSX 和 Eclipse 获得一个可用的 C++11 工具链

matlab - 在matlab中使用dll

c - 编写函数reverse(s)的递归版本,该函数将字符串s反转到位。我似乎找不到错误

c - 如何从流中读取数据而不等待换行符?

c - Bakery Lock 在结构内部使用时不起作用

GCC 编译器选项 -wno-four-char-constants 和 -wno-multichar

c - 为什么 GCC 以不同方式存储全局和静态 int?

delphi - 将二进制数据传递给 D7 中的 dll 函数

c++ - 使库函数使用从库类派生的类