簡體   English   中英

MATLAB - 編譯 jpeg_read.c 以創建 mexmaci64 文件時出錯

[英]MATLAB - Error compiling jpeg_read.c to create mexmaci64 file

最近我將我的 Matlab 項目從 Windows 操作系統移到了 Mac 操作系統。 所以我的 jpeg_read.mexw64 文件不再起作用,我需要創建一個與 Mac OS 兼容的新 mexmaci64 文件。 我從這里下載了 JpegToolbox,然后使用以下命令安裝了 Libjpeg:

brew install libjpeg

在 Matlab 中,我嘗試使用 mex:

>> mex -setup
MEX configured to use 'Xcode with Clang' for C language compilation.

To choose a different language, select one from the following:
 mex -setup C++ 
 mex -setup FORTRAN
MEX configured to use 'Xcode Clang++' for C++ language compilation.
>> 

但是當我嘗試:

mex -I/usr/local/Cellar/jpeg/9d/include jpeg_read.c -L/usr/local/Cellar/jpeg/9d/lib

Matlab 返回以下錯誤:

Building with 'Xcode with Clang'.
/Users/folder/jpeg_toolbox/jpeg_read.c:294:39: warning: incompatible pointer types passing 'int [2]' to parameter of type 'const mwSize *' (aka 'const unsigned long *') [-Wincompatible-pointer-types]
         mxtemp = mxCreateCharArray(2,dims);
                                      ^~~~
/Applications/Polyspace/R2020a/extern/include/matrix.h:958:91: note: passing argument to parameter 'dims' here
LIBMMWMATRIX_PUBLISHED_API_EXTERN_C mxArray *mxCreateCharArray(mwSize ndim, const mwSize *dims);
                                                                                          ^
1 warning generated.

Error using mex
Undefined symbols for architecture x86_64:
  "_jpeg_CreateDecompress", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_destroy_decompress", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_finish_decompress", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_read_coefficients", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_read_header", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_save_markers", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_std_error", referenced from:
      _mexFunction in jpeg_read.o
  "_jpeg_stdio_src", referenced from:
      _mexFunction in jpeg_read.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
 

現在我該如何編譯程序? 否則,你們中有人已經得到了我需要的 mexmaci64 嗎?

當 MEX 文件使用int而不是mwSize作為數組大小時,通常會發生此錯誤。 只有非常舊的 MEX 文件代碼仍然這樣做。

對於這些 MEX 文件,您需要在編譯時將-compatibleArrayDims添加到mex命令中。 它會導致編譯器選擇舊的 32 位 API 而不是較新的 64 位 API 之一。 這確實限制了數組的最大大小,但僅限於與寫入 MEX 文件時的限制一致的方式。

另一種解決方案是重寫 MEX 文件以使用更新的 API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM