官网:http://ccwu.me/vsfm/
(解决过程蓝色字,问题原因解决方法红色字)
SFM computer missing match阶段运行出现错误

More than 189MB of graphic memory may be allocated
under the default settings. If the program halts here,
adjust parameters to save memory and rerun the task:
[Tools->Enable GPU->Set Maximum DIM]
Note some octaves may be automatically skipped
ERROR: unable to load libsiftgpu.so
ERROR: unable to get function address
SIFT: , 1080x1920, ERROR1
ERROR: unable to locate sift binary.
FAQ at http://ccwu.me/vsfm/doc.html#errors

查看官方文档提示如下
1. "SiftGPU failed the detection test" or "ERROR: siftgpu doesn't work"
    This means SiftGPU feature detection did not work properly. Either your graphic driver
    is out-dated or your graphic card does not support SiftGPU at all. You should give
    it another try after updating the graphic driver. If it fails the same way, you may
    need to switch to CPU for feature detection or get a better GPU.

2. "ERROR1" + "ERROR: unable to locate sift binary"
    This means VisualSFM tried to use CPU feature detector but it could not find it.
    Under windows, it looks for .\SiftWin32.exe if param_use_vlfeat_or_lowe==0 or
    .\sift.exe otherwise. For other OS, it will look for ./sift

1.SiftGPU无法工作,可能是显卡驱动程序过时,或者显卡驱动不支持SiftGPU,可以更新显卡驱动进行尝试,如果依旧失败,可以转换用CPU进行特征检测或获取更好的GPU
2.找不到SIFT二进制文件,意味着VisualSFM试图使用CPU功能检测器,但找不到它。

Typical hardware requirements
1. The feature detection step requires a decent GPU (ATI/ nVidia / Intel)
   In particular, a large amount of GPU memory (1GB) is expected.
   Small GPU memory may cause problems for the feature detection: click here.
   The latest SiftGPU-V400 works for Intel graphic card in some platforms.
1.特征检测步骤需要一个合适的GPU(ATI/Nvidia/Intel)尤其需要大量的GPU内存(1GB)。小的GPU内存可能会导致功能检测出现问题:单击此处。最新的siftgpu-v400可在某些平台上的英特尔显卡上工作。

我的显卡驱动以及CUDA信息如下,硬件环境方面并没发现什么问题
NVIDIA-SMI 418.39       Driver Version: 418.39       CUDA Version: 10.1

尝试了以下操作:

1.对SiftGPU重新编译
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ make clean
rm -f build/*.o
rm -f bin/libsiftgpu.a
rm -f bin/libsiftgpu.so
rm -f bin/TestWinGlut
rm -f bin/SimpleSIFT
rm -f bin/speed
rm -f bin/server_siftgpu
rm -f bin/MultiThreadSIFT
rm -f ProgramCU.linkinfo
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ make -j12

cp /usr/lib64/libGLEW.so.2.1 ../../VisualSFM_linux_64bit/vsfm/bin/
cp /usr/lib64/libGLEW.so.2.1 ../../VisualSFM_linux_64bit/vsfm/bin/

2.将libsiftgpu.so拷贝至/usr/local/lib/目录

~/Documents/SFMSource/VisualSFM_linux_64bit/vsfm$sudo cp bin/libsiftgpu.so  /usr/local/lib/

~/Documents/SFMSource/VisualSFM_linux_64bit/vsfm$ bin/VisualSFM

失败

2.将正确的路径加入环境变量

~/Documents/SFMSource/VisualSFM_linux_64bit/vsfm$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/Documents/SFMSource/VisualSFM_linux_64bit/vsfm/bin

~/Documents/SFMSource/VisualSFM_linux_64bit/vsfm$ bin/VisualSFM
失败

3.进入/SiftGPU-V400/SiftGPU/bin 运行可执行文件SimpleSIFT,运行失败,查看依赖后进入程序源码/SiftGPU-V400/SiftGPU/src/TestWin/SimpleSIFT.cpp查找原因。

~/Documents/SFMSource/SiftGPU-V400/SiftGPU/bin$ ./SimpleSIFT
运行SimpleSIFT文件无结果显示。
~/Documents/SFMSource/SiftGPU-V400/SiftGPU/bin$ ldd ./SimpleSIFT
查看相关依赖正常
打开源码
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ vim src/TestWin/SimpleSIFT.cpp
在void * hsiftgpu = dlopen("libsiftgpu.so", RTLD_LAZY);处打印一些字符判断是否加载成功。
再执行
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ make
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ bin/SimpleSIFT

无结果显示,将路径加入环境变量再运行
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/Documents/SFMSource/SiftGPU-V400/SiftGPU/bin
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ bin/SimpleSIFT
打印结果说明.so文件依旧没有成功加载

------可忽略的系列尝试
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$export LD_LIBRARY_PATH=~/Documents/SFMSource/SiftGPU-V400/SiftGPU/bin
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ echo $LD_LIBRARY_PATH
/home/zsl/Documents/SFMSource/SiftGPU-V400/SiftGPU/bin
修改了路径变量再运行
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ bin/SimpleSIFT
hello?
还是不行,重新编译
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ make -j12
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ vim src/TestWin/SimpleSIFT.cpp
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ man dlopen
----------
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ vim src/TestWin/SimpleSIFT.cpp
4.根据 dlopen 命令的使用,
在SimpleSIFT.cpp中so载入异常出添加代码,使其打印加载so失败的错误原因
添加代码如下:       
 //void * hsiftgpu = dlopen("libsiftgpu.so", RTLD_LAZY);
        void * hsiftgpu = dlopen("/home/zsl/Documents/SFMSource/SiftGPU-V400/SiftGPU/bin/libsiftgpu.so", RTLD_LAZY);
    
     if (!hsiftgpu) {
               fprintf(stderr, "%s\n", dlerror());
               exit(EXIT_FAILURE);
           }

#endif

printf("hello?\n");
    if(hsiftgpu == NULL) return 0;

printf("hello\n");

编辑完成后,编译执行
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ make
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ bin/SimpleSIFT
libGLEW.so.2.1: cannot open shared object file: No such file or directory

返回了失败原因:因为加载libsiftgup.so需要加载libGLEW.so.2.1然而找不到该文件。说明该文件没有指明路径。找到该文件:
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ locate libGLEW.so.2.1
/home/zsl/Documents/SFMSource/glew-2.1.0/lib/libGLEW.so.2.1
/home/zsl/Documents/SFMSource/glew-2.1.0/lib/libGLEW.so.2.1.0
/usr/lib64/libGLEW.so.2.1
/usr/lib64/libGLEW.so.2.1.0

将libGLEW.so.2.1拷贝到SiftGPU-V400/SiftGPU/bin/目录下运行SimpleSIFT 出结果了。
~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ cp /usr/lib64/libGLEW.so.2.1 bin/

~/Documents/SFMSource/SiftGPU-V400/SiftGPU$ bin/SimpleSIFT
hello?
hello
[GPU VENDOR]:    NVIDIA Corporation 10404MB
TEXTURE:    32768

[SiftGPU Language]:    GLSL
Unable to open image [code = 1290]
Unable to open image [code = 1290]
[SiftMatchGPU]: GLSL

0 sift matches were found;

为使其找到libGLEW.so.2.1,将其拷贝到vsfm/bin/下
cp /usr/lib64/libGLEW.so.2.1 ../../VisualSFM_linux_64bit/vsfm/bin/

~/Documents/SFMSource/VisualSFM_linux_64bit/vsfm$ bin/VisualSFM

成功。

===========================
第二天开机使用又出现了一样的 unable to load  libsiftgpu.so
错误,而且/SiftGPU-V400/SiftGPU$ bin/SimpleSIFT 是有输出的。
然后我编译了几次都没有解决问题,最后到目录/VisualSFM_linux_64bit/vsfm下
$ sudo cp bin/libsiftgpu.so  /usr/local/lib

Computer Missing Matches成功

VisualSFM使用记录1 unable to load libsiftgpu.so的更多相关文章

  1. Hadoop集群“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable”解决办法

    Hadoop集群部署完成后,经常会提示 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfo ...

  2. 关于cocos2dx 3.0升级崩溃报错(unable to load native library) 和(Fatal signal 11 (SIGSEGV) at 0x00000000)

    近期一直在Windows平台开发cocos-2dx游戏,期间做了一次引擎升级,升级到了3.0正式版本号.Windows平台上表现非常正常,没有出现什么问题. 上周五准备公布一个安卓包,编译非常轻松的就 ...

  3. 17/11/24 05:08:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    2017-11-24 21:20:25 1:什么叫失望,什么叫绝望.总之是一脸懵逼的继续...... 之前部署的hadoop都是hadoop-2.4.1.tar.gz,这几天换成了hadoop-2.6 ...

  4. 项目初始化以后出现:Unable to load script from assets 'index.android.bundle

    Mac中真机测试React Native project时出现Unable to load script from assets 'index.android.bundle' 2018年01月21日 ...

  5. Caused by: Unable to load configuration. - action - file:/C:/apache-tomcat-7.0.70/webapps/Structs/WEB-INF/classes/struts.xml:7:72 at com.opensymphony.xwork2.config.ConfigurationManager.getConfigurati

    Unable to load configuration. - action - file:/C:/apache-tomcat-7.0.70/webapps/Structs/WEB-INF/class ...

  6. zookeeper无法启动"Unable to load database on disk

    QuorumPeerMain,ResourceManager都没有起来 resourcemanager.log如下 2018-09-28 23:17:02,787 FATAL org.apache.h ...

  7. [转]genymotion Unable to load VirtualBox engine 某种解决办法

    genymotion Unable to load VirtualBox engine 某种解决办法 耳闻genymotion这款模拟器很强力.于是下下来试试看.我的机器上是有virtualbox的了 ...

  8. Hadoop安装—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platf

    今天在安装hadoop完成测试创建用户目录失败在网上找到了原因记录一下原文地址 http://blog.csdn.net/l1028386804/article/details/51538611 配置 ...

  9. Unable to load dynamic library 'zip.so' on Centos 6.8 useing php7.3

    背景: Centos6.8服务器升级php版本,从7.1升级到7.3,常用扩展都安装完成之后,报:Class 'ZipArchive' not found.一看就是zip扩展没有,需要手动安装了. 中 ...

随机推荐

  1. CF3A Shortest path of the king

    The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...

  2. Linux在终端命令行模式下智能补全功能以及组合键

    linux命令行下也有很多热键(快捷键).先来看看tab键 1.如果想看看linux下以c开头的命令可直接在命令行下敲入c然后连续敲两次tab,再选择y,会显示所有以c开头的命令. 2.涉及到文件时, ...

  3. git从已有分支拉新分支开发

    开发过程中经常用到从master分支copy一个开发分支,下面我们就用命令行完成这个操作: 1. 切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout maste ...

  4. 编译安装centos6.9 php7.0 mysql5.6 nginx1.8

    2018年3月15日 11:41:40 注意文章时效! 此文章不是给新用户参考的,没有每一步的操作,请注意! yum -y groupinstall "Development Tools&q ...

  5. Parallel.ForEach 多线程 声明失败 "未将对象引用设置到对象的实例"

    x using System; using System.Collections.Generic; namespace Parallel.ForEach { class Program { //代码结 ...

  6. windows 控制台下运行cl命令

    前提:确保已经安装vc6或者vs系列 我们可以再命令行直接编译c++程序, 在windows操作系统中,打开命令行,输入cl,若系统提示:'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件. ...

  7. 目标检测(二)SSPnet--Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognotion

    作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun 以前的CNNs都要求输入图像尺寸固定,这种硬性要求也许会降低识别任意尺寸图像的准确度. ...

  8. Python3下载图片的方法

    1 第一种 from urllib import request request.urlretrieve(s, './图片1.jpg') # 第一种 # s是图片的网络地址,./图片1.jpg,是图片 ...

  9. 1_01 vue的双向绑定

    听说vue1是双向绑定,不过现在Vue2不能直接双向绑定,需要设置绑定. 一.常见的是input表单的v-model const component = { template: ` <div&g ...

  10. jmeter二次开发之java请求

    现在很多公司都用的是微服务,每个服务的请求协议有可能不相同,怎样用jmeter二次开发自己的java请求? 下面是具体的开发步骤: 1,把需要的jar包 添加到maven依赖中 jmeter中java ...