将 jpeg_read.c 编译为 MATLAB 的 mexmaci64
Posted
技术标签:
【中文标题】将 jpeg_read.c 编译为 MATLAB 的 mexmaci64【英文标题】:Compile jpeg_read.c as mexmaci64 for MATLAB 【发布时间】:2018-02-24 18:10:27 【问题描述】:我从this site 下载了用于 MATLAB 的 jpeg_toolbox,然后从here 下载了 JPEG 编译器工具。我按照说明为 Mac (UNIX*) 配置了整个系统。
现在,我需要将 jpeg_read.c
和 jpeg_write.c
编译到 MATLAB 的第一个链接中,因为工具箱不提供 mexmaci64 文件。但是,当我尝试:
mex jpeg_read.c
MATLAB 返回以下错误:
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 -I<IJGPATH> jpeg_read.c <LIBJPEG>
.
是的,应该有一些名为 libjpeg.a/libjpeg.lib 的库,但我只能找到 mex 编译器无法识别的扩展。
指令还说“使用 IJG JPEG 发行版中包含的 make 文件和指令构建 libjpeg 库”。如果这样做,您将拥有一个名为 libjpeg.a
或 libjpeg.dylib
的文件。按照指示将该文件(包括完整路径)添加到 mex
命令。
我确实做到了,但唯一的 libjpeg 文件具有扩展名.la
.map
.pc
.pc.in
。但是,如果我尝试将 mex 与其中之一一起使用,编译器会抱怨它不识别也不识别那些。
根本没有带有.a
或.dylib
扩展名的文件?
【参考方案1】:
我是这样解决的:
brew install libjpeg
我在 /usr/local/lib
中找到了库,因此在 MATLAB 上我移入了包含必须编译的 .c
文件的文件夹并运行:
mex jpeg_read.c "/usr/local/lib/libjpeg.a"
mex jpeg_write.c "/usr/local/lib/libjpeg.a"
【讨论】:
以上是关于将 jpeg_read.c 编译为 MATLAB 的 mexmaci64的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB - 从 jpeg_write.c 创建 maxmaci64 时出错
详细步骤讲解matlab代码通过Coder编译为c++并用vs2019调用