2

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

它编译 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"
4

3 回答 3

4

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

  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。动态部分中出现 libvl.so 条目或重建 mex 文件,通过“mkoctfile --mex -lvl ...”明确指定缺少so。

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

于 2013-02-19T03:16:39.973 回答
1

我也有同样的问题,使用 Octave 3.6.2 和 vlfeat 0.9.16。检查 octave.mak 并注意到 OCTAVE_MEX_FLAGS 为空,并且从未使用过 OCTAVE_MEX_LDFLAGS。因此,在 octave-mex-all 部分,我尝试使用 OCTAVE_MEX_LDFLAGS 更改 OCTAVE_MEX_FLAGS 。也就是说,我使用了:

 $(MKOCTFILE) \
       --mex $(OCTAVE_MEX_LDFLAGS) \
       "$(<)" --output "$(@)"
@rm -f $(<:.c=.o)

然后我用 make all 重建,现在一切正常。但我没有试图进一步调查为什么会这样。

希望这可以帮助

于 2013-02-24T21:33:54.643 回答
1

万一将来有人碰到这个线程,这个问题在 Octave 4.0.0 中仍然存在。按照此处的建议在编译库之前更改 make/octave.mak 解决了我的问题:https ://github.com/vlfeat/vlfeat/issues/18 。应该设置 OCTAVE_MEX_LDFLAGS 而不是 OCTAVE_MEX_FLAGS。

# Linux on 32 bit processor
ifeq ($(ARCH),glnx86)
OCTAVE_MEX_LDFLAGS += -Wl,--rpath,\\\$$ORIGIN/
endif

# Linux on 64 bit processorm
ifeq ($(ARCH),glnxa64)
OCTAVE_MEX_LDFLAGS += -Wl,--rpath,\\\$$ORIGIN/
endif
于 2016-10-28T19:56:05.817 回答