octave - 在 Octave : undefined symbol 中编译 vlfeat mex

标签 octave mex vlfeat

我希望这个问题不是很具体。我正在尝试编译 vlfeat Octave 3.6.2 的库。

它编译 mex 文件没有错误。但是如果我执行

vl_setup
vl_demo

我明白了

error: vl_demo_sift_basic: vl_sift.mex: failed to load: vl_sift.mex: undefined symbol: vl_sift_process_next_octave

如果我改为使用 octave 3.4.3,则 mex 文件加载时不会出现错误。 (但后来由于matlab函数在这个版本的octave中还没有实现,所以还有其他错误。)

我不知道如何开始调查这个问题。 出现此类错误消息的原因可能是什么? 或者我可以做些什么来进一步调查这个问题?

更新: 我做了更多的研究。但是我对链接和编译的过程不是很熟悉。

使用 ldd 我可以看到 vlfeat 共享库没有出现在列表中。 使用 nm 符号显示为“U”表示未定义。 但我认为应该链接库。问题出在所有 mex 文件上。这是文件编译方式的一个示例。据我所知,该库已链接到 mex 文件。

CFLAGS="-std=c99 -Wall -Wextra -Wno-unused-function -Wno-long-long -Wno-variadic-macros    -DNDEBUG -O3  -I./toolbox" \
CXXFLAGS="" \
LDFLAGS=" -Wl,--rpath,\$ORIGIN/ -Wl,--as-needed -lpthread -lm -Lbin/glnxa64 -lvl" \
 mkoctfile \
       --mex  \
       "./toolbox/misc/vl_version.c" --output "toolbox/mex/octave/vl_version.mex"

最佳答案

我遇到了同样的问题。以下作品:

  1. 通过“nm libvl.so | grep vl_sift_process_next_octave”确保 vlfeat 动态库 - libvl.so 中缺少符号“vl_sift_process_next_octave 存在”。如果不是这样,你应该重建 vlfeat。

  2. 如果是,请检查烦人的 mex 文件 vl_sift.mex 是否通过“readelf -d vl_sift.mex”正确引用了 libvl.so。在动态部分或重建 mex 文件中出现 libvl.so 条目,通过“mkoctfile --mex -lvl ...”明确指定缺少 so。

  3. 现在还有最后一步。 “libvl.so”应该对 Octave 可见。使用ldconfig将libvl.so添加到so缓存中,通过“ldconfig -p | grep libvl.so”测试缓存中是否存在。就这些。

关于octave - 在 Octave : undefined symbol 中编译 vlfeat mex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11257836/

相关文章:

c - "One or more output arguments not assigned during call to "input_4”是什么意思?

带有两个圆括号对的 C 函数?

octave - "dimension too large"广播到 Octave 稀疏矩阵时出错

osx-lion - Octave 在 Mac OS X 10.7.4 上安装失败(使用 Homebrew 软件)

python - 在 os x 上的 matlab mex 文件中嵌入 python

MATLAB - 编译 jpeg_read.c 创建 mexmaci64 文件时出错

computer-vision - SIFT关键点方向与SIFT描述方向之间的关系

c++ - SLIC c++ 分段

plot - Octave:通过颜色混合创建两个直方图

matlab - 使用可变精度算法获取数字的第一个有效数字