1

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

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

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

失败并出现一堆错误消息,例如:undefined reference to `inflateEnd'。这也可以通过在编译器调用中添加 zlib 来解决:

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

现在错误消息与对 `__intel_sse2_strlen' 的未定义引用不同。因此,zlib 库似乎是编译所必需的。

我现在有以下问题:

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

1 回答 1

2

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

./configure --with-zlib=no

configure.ac(从和检查这个config/matio_zlib.m4。)

如果您想使用 icc 构建 matio,英特尔的开发人员页面告诉您__intel_sse2_strlen 在 Linux 上的 libirc.a 和 Windows 上的libirc.lib中定义。

用 gcc 编译 matio

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

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

于 2015-01-16T12:05:21.407 回答