【问题标题】:Trying to use matlab's libmat.dll, but the compiler doesn't recognize the function from the library尝试使用 matlab 的 libmat.dll,但编译器无法识别库中的函数
【发布时间】:2014-08-28 13:15:53
【问题描述】:

我正在尝试在 C 应用程序中使用 matlab libmat.dll。为了编译我的 C 应用程序,我使用 MinGW,现在我使用 matlab 示例“matcreate.c”并尝试编译它,因此项目仅包含一个文件:main.c。

这是我使用的makefile:

MATINCLUDE  = "C:\Program Files\MATLAB\R2010a\extern\include"
MATLIBRARY  = "C:\Program Files\MATLAB\R2010a\bin\win64"
#
CC       = gcc  
LD       = gcc
CFLAGS   = -O3  -Wall 
LFLAGS   = -Wall -O3 
LIBS     = -I$(MATINCLUDE) -L$(MATLIBRARY)  
#
PROG     = matTest
LISTEOBJ = \
  main.o 

.c.o :
    $(CC) -c  $(CFLAGS) $(LIBS) -o $@ $<
all        : $(PROG)


$(PROG) : $(LISTEOBJ)
    $(LD) -o $(PROG) $(LFLAGS) $(LISTEOBJ) $(LIBS)

clean :
    rm -f *.obj

这是我在控制台中得到的内容

E:\Users\Desk\Dropbox\matTest>make

gcc   -c  -O3  -Wall  -I"C:\Program Files\MATLAB\R2010a\extern\include" -L"C:\Pr
ogram Files\MATLAB\R2010a\bin\win64"   -o main.o main.c
gcc -o Hello_world -Wall -O3  main.o  -I"C:\Program Files\MATLAB\R2010a\extern\i
nclude" -L"C:\Program Files\MATLAB\R2010a\bin\win64"
main.o:main.c:(.text.startup+0x48): undefined reference to `matOpen'
main.o:main.c:(.text.startup+0x6e): undefined reference to `mxCreateDoubleMatrix
_730'
e:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: main.o: ba
d reloc address 0x6e in section `.text.startup'
e:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
 failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [Hello_world] Error 1

为什么我有“未定义的 matOpen 引用”和“未定义的 mxCreateDoubleMatrix 引用”?这些函数在 mat.h 中声明。我在 main.c 的开头添加了#include "mat.h"

谢谢

【问题讨论】:

    标签: c matlab dll mingw mat


    【解决方案1】:

    看起来您已经包含了 matlab 库的路径,但没有包含库本身。您需要在链接行中添加-l&lt;libraryname&gt;

    【讨论】:

    • 我添加了-lmat已经更好了,但现在我有另一个错误:E:\Users\Desk\Dropbox\2660\hello_world>make gcc -o Hello_world -Wall -O3 main.o - I"C:\Program Files\MATLAB\R2010a\extern\include" -L"C:\Program Files\MATLAB\R2010a\bin\win64" -lmat C:\Program Files\MATLAB\R2010a\bin\win64/ libmat.dll:文件无法识别:文件格式无法识别 collect2.exe:错误:ld 返回 1 退出状态 make:*** [Hello_world] 错误 1 ​​为什么无法识别文件?
    • 可能是因为我有 MinGW32 并且库来自 matlab 64 位?
    • 如果您尝试链接到 64 位库,则需要构建 64 位二进制文​​件。您可以尝试将 -m64 添加到您的 CFLAGS 中。如果这不起作用,您可能没有支持 64 位的 MinGW 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多