从Windows使用Cygwin编译的dll

时间:2016-04-10 13:24:32

标签: c++ c dll cygwin

我需要使用visual studio C ++或Code:block MinGW中的cygwin编译的dll。

我试过用这个简单的例子

#include <stdio.h> 
int  MyFunc()
{
    printf("Printed from cygwin dll");
    return 0;
}

这个makefile

obj = mydll.o   
ALLLIBS = \
    mydll.a \
    mydll.dll

all: $(ALLLIBS)

mydll.a: $(obj)
    $(LINK.a)

mydll.dll: $(obj)
    $(cygTest.dll)


cygTest.dll     = gcc -shared -o cygTest.dll \
    -Wl,--out-implib \
    -Wl,--export-all-symbols \
    -Wl,--enable-auto-import \
    -Wl,--whole-archive $(obj) \
    -Wl,--no-whole-archive 

mydll.a = ar $(ARFLAGS) $@ $%   

我想在这里调用最终的dll。

#include <windows.h>
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

typedef int(*FnP_MyFunc)();
typedef void(*FnP_CYGWIN_DLL_INIT)();

int main()
{
    FnP_MyFunc fnMyFunc;
    HMODULE hLib, hGetCygwinIDDLL = LoadLibrary(TEXT("C:\\cygwin64\\bin\\cygwin1.dll"));
    if (hGetCygwinIDDLL)
    {
        FnP_CYGWIN_DLL_INIT init = (FnP_CYGWIN_DLL_INIT)GetProcAddress(hGetCygwinIDDLL, "cygwin_dll_init");
        init();
        std::cout << "init complete " << endl;
    }
    int a;
    hLib = LoadLibrary(TEXT("C:\\cygwin64\\home\\azatyan\\TestDynamicLink\\cygTest.dll"));
    if (hLib)
    {
        std::cout << "From wrapper dll  " << std::endl;
        fnMyFunc = (FnP_MyFunc)GetProcAddress(hLib, "MyFunc");
        a = fnMyFunc();         
        cout << a;

    }
    FreeLibrary(hGetCygwinIDDLL);
    FreeLibrary(hLib);
    return 0;
}

当它到达我的MyFunc函数时它就会挂起。或者退出代码为1536 .. 任何人都可以帮助我,我做错了什么?

更新:我尝试了同样没有printf()功能,工作正常,返回预期值,这意味着问题出在依赖库中,但我还是没有知道我可以添加所有依赖库..

0 个答案:

没有答案