使用 g++ 静态链接 matio 库

Statically linking matio library using g++

如何静态地 link matio,一个用于读取 mat 文件的库,主要由 matlab 和 octave 使用到可执行文件中?

如果文件 main.cpp 包含编译器调用的 matio 功能

g++ -o main main.cpp -Imatio/include matio/lib/libmatio.a

失败并出现一堆错误消息,例如:对 `inflateEnd' 的未定义引用。这也可以通过将 zlib 添加到编译器调用来解决:

g++ -o main main.cpp -Imatio/include matio/lib/libmatio.a -lz

现在错误消息与 undefined reference to `__intel_sse2_strlen' 不同。因此看来 zlib 库对于编译是必需的。

我现在有以下问题:

  1. 要静态 link 可执行文件中的 matio 库,您需要做什么?
  2. 为什么我需要添加 zlib 库,即使我使用 ./configure --without-libz 配置和编译了 matio?

要在没有 zlib 的情况下构建 matio,您显然需要使用

调用配置
./configure --with-zlib=no

(从 configure.acconfig/matio_zlib.m4 中检查了这个。)

如果您想使用 icc 构建 matio,Intel 的 developer pages 会告诉您 __intel_sse2_strlen 在 [=31 上的 libirc.a 中定义=] 和 libirc.lib 在 Windows.

用 gcc 编译 matio

./configure --with-zlib=no CC=gcc

之后,matio 库可与问题中发布的调用静态链接