visp库中解决lapack库的问题
解决的办法是——绕过去,不要用这个库:
使用中发现如下代码抛出异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //vpTemplateTracker.cpp try { initHessienDesired(I); ptTemplateSuppPyr[0] = ptTemplateSupp; ptTemplateCompoPyr[0] = ptTemplateCompo; HdesirePyr[0] = Hdesire; HLMdesirePyr[0] = HLMdesire; HLMdesireInversePyr[0] = HLMdesireInverse; } catch ( const vpException &e) { ptTemplateSuppPyr[0] = ptTemplateSupp; ptTemplateCompoPyr[0] = ptTemplateCompo; HdesirePyr[0] = Hdesire; HLMdesirePyr[0] = HLMdesire; HLMdesireInversePyr[0] = HLMdesireInverse; throw (e); } |
调用栈是:
1 2 3 4 5 6 | #5 0x00007ffff7b33b93 in __cxa_throw () from /lib64/libstdc++.so.6 #6 0x0000000000416b80 in vpTemplateTracker::initHessienDesiredPyr (this=0x7fffffffd470, I=...) at /data/ahfu/visp/modules/tracker/tt/src/vpTemplateTracker .cpp:756 #7 0x0000000000416603 in vpTemplateTracker::initFromPoints (this=0x7fffffffd470, I=..., v_ip=..., delaunay= false ) at /data/ahfu/visp/modules/tracker/tt/src/vpTemplateTracker .cpp:704 #8 0x0000000000406a47 in main (argc=1, argv=0x7fffffffe358) at test.cpp:148 |
不太清楚究竟为何抛异常,于是注释掉try catch,重新编译链接执行。
看到了如下异常信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #5 0x00007ffff7b33b93 in __cxa_throw () from /lib64/libstdc++.so.6 #6 0x00000000004519b9 in vpMatrix::inverseByLULapack (this=0x7fffffffc390) at /data/ahfu/visp/modules/core/src/math/matrix/vpMatrix_lu .cpp:385 #7 0x00000000004514ff in vpMatrix::inverseByLU (this=0x7fffffffc390) at /data/ahfu/visp/modules/core/src/math/matrix/vpMatrix_lu .cpp:133 #8 0x000000000040d477 in vpTemplateTrackerSSDInverseCompositional::initCompInverse ( this=0x7fffffffd470) at /data/ahfu/visp/modules/tracker/tt/src/ssd/vpTemplateTrackerSSDInverseCompositional .cpp:79 #9 0x000000000040d7c3 in vpTemplateTrackerSSDInverseCompositional::initHessienDesired ( this=0x7fffffffd470, I=...) at /data/ahfu/visp/modules/tracker/tt/src/ssd/vpTemplateTrackerSSDInverseCompositional .cpp:103 #10 0x00000000004167b1 in vpTemplateTracker::initHessienDesiredPyr (this=0x7fffffffd470, I=...) at /data/ahfu/visp/modules/tracker/tt/src/vpTemplateTracker .cpp:744 #11 0x0000000000416603 in vpTemplateTracker::initFromPoints (this=0x7fffffffd470, I=..., v_ip=..., delaunay= false ) at /data/ahfu/visp/modules/tracker/tt/src/vpTemplateTracker .cpp:704 #12 0x0000000000406a47 in main (argc=1, argv=0x7fffffffe358) at test.cpp:148 |
更换了最新的lapack库,仍然无法解决。
查看visp/modules/core/src/math/matrix/vpMatrix_lu.cpp 发现了这样的注释:
1 2 3 4 5 6 7 8 9 10 | 111 std::cout << "Inverse by LU " ; 112 # if defined(VISP_HAVE_LAPACK) 113 std::cout << "(using Lapack)" ; 114 #elif defined(VISP_HAVE_EIGEN3) 115 std::cout << "(using Eigen3)" ; 116 #elif (VISP_HAVE_OPENCV_VERSION >= 0x020101) 117 std::cout << "(using OpenCV)" ; 118 #elif defined (VISP_HAVE_GSL) 119 std::cout << "(using GSL)" ; 120 #endif |
说明编译选项可以选择不同的库。
于是:
cd /data/ahfu/visp/
mkdir build
cd build
ccmake .. #在界面中把 WITH_LAPACK设置为OFF
cmake ..
make -j
make install
重新编译测试程序运行,一切正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】