使用 g++ 静态链接 matio 库

Statically linking matio library using g++

本文关键字:matio 链接 静态 g++ 使用      更新时间:2023-10-16

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

如果文件主.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

现在,错误消息与未定义的"__intel_sse2_strlen"引用不同。因此,看起来 zlib 库对于编译是必需的。

我现在有以下问题:

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

要在没有 zlib 的情况下构建 matio,您显然需要调用 配置与

./configure --with-zlib=no

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

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

要使用 gcc 编译 matio 做

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

之后,Matio 库可与问题中发布的呼叫静态链接