【问题标题】:Creating a DLL in GCC or Cygwin?在 GCC 或 Cygwin 中创建 DLL?
【发布时间】:2011-10-06 23:22:44
【问题描述】:

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

我一直在寻找替代品,但我发现的只是 GCC,我不知道如何安装/使用(真的,我花了大约半个小时阅读文档,但我没有甚至了解我应该如何安装它),以及我已经安装但我不知道如何使用的 Cygwin。另外,我已经安装了MinGW,但我觉得和Cygwin差不多,还是不知道怎么做DLL。

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

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

提前谢谢你。

【问题讨论】:

    标签: c gcc dll compiler-construction c99


    【解决方案1】:

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

    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
    

    【讨论】:

    • 那不是__declspec 不是__delspec
    • extern "C" __declspec(dllexport)
    • 感谢大家及时发现,写错字了。
    • 如果您在 cygwin 的 gcc 上尝试此操作,您最终会得到与 cygwin1.dll 链接的 DLL,如果没有 EXE,这就是谋杀。使用 -m-no-cygwin(或者是 -mno-cygwin)作为 gcc 的一个选项来避免这种情况。
    • -mno-cygwin 是正确的,并且 Cygwin 和 MinGW 链接器都支持此选项,即使它对于独立的 MinGW 安装是多余的,因为 MinGW 是默认目标而不是 Cygwin。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多