我希望这个问题不是很具体。我正在尝试为 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"