2014-08-28 35 views
0

我想在C應用程序中使用matlab libmat.dll。爲了編譯我的C應用程序,我使用MinGW,現在我使用matlab例子「matcreate.c」並嘗試編譯它,所以這些項目只包含一個文件:main.c。試圖使用matlab的libmat.dll,但編譯器無法識別庫中的函數

這裏是我使用的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 [email protected] $< 
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中聲明。我加的#include「mat.h」到main.c中

的開頭謝謝

回答

1

看起來你已經包含了路徑MATLAB庫,而不是庫本身。您需要將-l<libraryname>添加到您的鏈接線。

+1

我已經加入了-lmat,但現在我又出現了另一個錯誤: E:\ Users \ Desk \ Dropbox \ 2660 \ hello_world> make 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「-lmat C:\ Program Files \ MATLAB \ R2010a \ bin \ win64/libmat .dll:文件無法識別:文件f ormat未識別 collect2.exe:錯誤:ld返回1退出狀態 make:*** [Hello_world]錯誤1爲什麼它不識別文件? – Luckyhendrix 2014-08-28 21:29:28

+0

可能是因爲我有MinGW32和庫是從MATLAB 64位? – Luckyhendrix 2014-08-29 10:48:36

+0

如果您嘗試鏈接64位庫,則需要構建64位二進制文​​件。您可以嘗試在您的CFLAGS中添加-m64。如果這不起作用,你可能沒有一個支持64位的MinGW版本。 – dohashi 2014-08-29 12:49:46

相關問題