2012-02-25 42 views
-3

我遵循指导,我发现hereMatlab 2011b和mingw64

我已经差不多完成了这项工作。以下部分是批量转换工作的段落。我已经创建了一个批处理文件,用于在Matlab 2011b Windows 7(64位)中转换大量由MSVC预先构建的DLL。

set path=C:\MinGW64\bin;C:\mingw\msys\bin; 

    mkdir lib 
    mkdir bin 
    @echo y |copy *.dll .\bin 
    @echo y |copy *.lib .\lib 

    @echo EXPORTS >libmex.def 
    @echo EXPORTS >libmx.def 
    @echo EXPORTS >libmat.def 
    @echo EXPORTS >libeng.def 
    @echo EXPORTS >libmwlapack.def 


    c:\mingw64\bin\pexports ./bin/libmex.dll | sed "s/^_//" > libmex.def 
    c:\mingw64\bin\pexports ./bin/libmat.dll | sed "s/^_//" > libmat.def 
    c:\mingw64\bin\pexports ./bin/libeng.dll | sed "s/^_//" > libeng.def 
    c:\mingw64\bin\pexports ./bin/libmwlapack.dll | sed "s/^_//" >libmwlapack.def 
    gendef ./bin/libmx.dll 

    echo "Add the mexErrMsgTxt string to each def file," 
    echo "then press any key to continue the conversion process" 
    pause 

    lib /machine:x64 /def:libmex.def /name:.\bin\libmex.dll /out:.\lib\libmex.lib 
    lib /machine:x64 /def:libmx.def /name:.\bin\libmx.dll /out:.\lib\libmx.lib 
    lib /machine:x64 /def:libmat.def /name:.\bin\libmat.dll /out:.\lib\libmat.lib 
    lib /machine:x64 /def:libeng.def /name:.\bin\libeng.dll /out:.\lib\libeng.lib 
    lib /machine:x64 /def:libmwlapack.def /name:.\bin\libmwlapack.dll /out:.\lib\libmwlapack.lib 

    c:\mingw64\bin\x86_64-w64-mingw32-dlltool --kill-at -U -d libmex.def -l /lib/libmex.a 
    c:\mingw64\bin\x86_64-w64-mingw32-dlltool --kill-at -U -d libmat.def -l ./lib/libmat.a 
    c:\mingw64\bin\x86_64-w64-mingw32-dlltool --kill-at -U -d libeng.def -l ./lib/libeng.a 
    c:\mingw64\bin\x86_64-w64-mingw32-dlltool --kill-at -U -d libmx.def -l./lib/libmx.a 
    c:\mingw64\bin\x86_64-w64-mingw32-dlltool --kill-at -U -d libmwlapack.def -l ./lib/libmwlapack.a 

生成文件为engwindemo.exe:

LIBS= -Lc:/mingw64/lib ../lib/libeng.a ../lib/libmx.a ../lib/ 
    libmex.a ../lib/libmat.a 

    CC=c:/mingw64/bin/gcc -m64 -O3 -I../include -Ic:/mingw64/include 

    EXE=../bin/engwindemo.exe 

    SRC=engwindemo.c 

    all:$(EXE) 

    $(EXE): $(SRC) 
      $(CC) $(SRC) $(LIBS) -L../lib -ladvapi32 -luser32 -lgdi32 -lkernel32 - 
    lmingwex -o $(EXE) 
      @rm -f *.o* 

使用(mingw64)GCC,编译和链接过程是确定。执行engwindemo.exe,我得到这个错误:

_engClose entry point error (in libeng.dll)

在mingw64,我怎么能建立一个独立的应用程序(engwindemo.exe)从函数的调用内置的libeng.dll(Matlab的R2011b) ?

+1

请妥善格式化您的问题和澄清您的实际问题。 – Egon 2012-02-25 08:54:41

+0

>我的问题是如何构建一个通过mingw64调用matlab 2011b(64位)引擎的独立可执行文件?在上述过程中,出现了什么问题 – 2012-02-25 11:18:24

+0

是的,我按照附加的指导方针行事,有些事情我错过了。 Mingw64可以生成从libeng.dll调用的独立应用程序。事实上,它没有运行。 – 2012-02-25 11:33:20

回答

-1

Thank everyone response! I have built up successfully! In the Matlab R2011b win32/64, just setting up in the cygwin(x86_64-w64-mingw32-gcc 4.5.2) environment without any dll file conversion. The part of primary setting is as following

  1. 设置在短文件名的形式的MATLABROOT

    MATLABROOT = C(长文件名可能是确定。):/ PROGRA〜1/MATLAB/R2011b

  2. 链接初级文库由MSVC

    LIBS = -L $(MATLABROOT)/斌/ Win64中内置-lmex -lmx -lmwlapack -lmwblas -leng

  3. 声明了gcc与标志

    CC = x86_64的-W64-的mingw32-GCC

    CFLAG = -Wall -m64 -O3 -I $(MATLABROOT)/的extern /包括

    MEXFLAG = - m64 -shared -DMATLAB_MEX_FILE -I $(MATLABROOT)/ extern/include -Wl, - 导出全部符号$(LIBS)

  4. 其他附加参数以保持编译器的快乐。

    And finally, in the cygwin consloe or mingw64 shell just make this project.

+0

你是对的! MinGW能够“直接链接”到DLL(请参阅[这里](http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/win32.html)。你的答案(不需要整个'makefile'来解释做什么,不需要advapi32等)。特别是,不需要'''''''''''''''''''''''''' – user1071136 2012-02-26 12:26:41