一文教你如何永久關閉PCL+VTK 在Windows環境下彈出的vtkOutputWindow

一文教你如何永久關閉PCL+VTK 在Windows環境下彈出的vtkOutputWindow

最近做PCL windows客戶端開發,環境什麼都配置好了,代碼也跑起來了,但是煩人的事情來了,就是一運行就會彈出vtkOutputWindow,如下圖:
在這裏插入圖片描述
網上查了一通,各種方法都不能解決,比如初始化前添加:
vtkObject::GlobalWarningDisplayOff();
這個實際上是有效果的,但只是針對是你當前項目下使用的vtk,而大部分人在Windows下用的PCL應該都是直接從github上releases頁面下載的,也就是那個AllInOne的安裝包,但這裏PCL是編譯好的,而且編譯用的VTK庫是沒有關閉該警告窗口的。所以,網上那些文章裏提到的解決方法都是對你無效的。
https://github.com/PointCloudLibrary/pcl/releases
在這裏插入圖片描述
劃重點:解決方法就是重新編譯PCL+VTK
簡單步驟如下:

  1. 下載PCL-1.9.1-AllInOne-msvc2017-win64.exe 安裝,因爲自己編譯也需要裏面的第三方庫,安裝這個可以直接用裏面的第三方庫,省的自己再找。
  2. 下載PCL-1.9.1源碼 github上下載 tag = pcl-1.9.1
  3. 下載VTK源碼,https://vtk.org/download/
  4. 用CMAKE配置VTK,然後VS編譯,如何編譯文章很多就不多說,注意VTK_LEGACY_SILENT要打勾,這樣就不會再彈出那個窗口了。
    在這裏插入圖片描述
    可以看下VTK源碼中的vtkSetGet.h這個頭文件中有這麼一段代碼:
#if defined(VTK_LEGACY_REMOVE) || defined(VTK_LEGACY_SILENT)
# define VTK_LEGACY_BODY(method, version)
# define VTK_LEGACY_REPLACED_BODY(method, version, replace)
#else
# define VTK_LEGACY_BODY(method, version) \
  vtkGenericWarningMacro(#method " was deprecated for " version " and will be removed in a future version.")
# define VTK_LEGACY_REPLACED_BODY(method, version, replace) \
  vtkGenericWarningMacro(#method " was deprecated for " version " and will be removed in a future version.  Use " #replace " instead.")
#endif

所以,如果定義了VTK_LEGACY_SLIENT就不會調用vtkGenericWarningMacro這個方法,自然就沒有Generic Warning窗口了。

  1. CMAKE配置PCL,如何配置文章也很多,需要的第三方庫剛纔第一步中的exe安裝後也都有,只有VTK要用重新編譯的版本就可以了。

所以,Windows上做PCL開發想要不彈出Generic Warning窗口(vtkOutputWindow),請自己重新編譯PCL+VTK,這是一個漫長的等待過程!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章