将 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.cjpeg_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.alibjpeg.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调用

MATLAB编译器

将 Swift 编译为 WebAssembly

强制将特定文件编译为 Objective-C/文件类型,但将整个项目编译为 Objective-C++

将现有 C# 代码编译为 WebAssembly