天天看點

使用msys2建構OSG程式

前言

讓我們先從兩個小故事開始:

故事一

Unix在研發成功不久後,便被放在貝爾實驗室供大家使用。

有一天,大家發現兩位創始人總是可以得到最高的權限,輕松地進入他們的帳戶!

在貝爾實驗室這種高人雲集的地方,這簡直是太不能容忍的事情了。于是,若幹憤懑的同僚仔細分析Unix代碼,找到後門,修改後再重新編譯整個Unix程式。

當所有人都以為這個世界應該從此清靜了的時候,卻發現他們的帳戶權限還是很容易洩露。

直到很多年後,丹尼斯裡奇才道出其中的原委:原來,代碼裡确實存在後門,不過并不在Unix代碼中,而是藏在編譯Unix的編譯器裡。

故事二

1997年,由于喜歡滑翔機運動且對計算機圖形學非常熟悉,Don Burns在 IRIX上寫了一個控制滑翔機的小引擎,這便是 OSG 的最初雛形。

一年後,他在滑翔機愛好者郵件清單中遇到了 Robert Osfield,這對OSG的命運起到了決定性的改變!

注:

  • OSG全稱OpenSceneGraph最初是在IRIX系統上建構的開放源代碼,跨平台的三維引擎。
  • IRIX是SGI公司的圖形工作站,基于BSD UNIX的作業系統;另外最初版的OpenGL是SGI公司制定的标準。

準備

UNIX、編譯器、OpenGL、OSG這些科技名詞可能會讓極客心跳加速,有想了解,并從頭建構的沖動。

自從棱鏡門事件,到中興、華為被美國、西歐制裁這段時間,國産化一再被提及。資訊技術代表了最新進的生産力,在中國,資訊化被确定為國家核心戰略之一。一個無法回避的事實是,全球IT核心技術大多掌握在歐美國家手中,逐漸縮小并超越國外先進資訊技術,盡早打破國外的技術壟斷,是我國的資訊化建設的必然選擇。

從頭開始建構,被程式圈戲稱為“造輪子”。

某些人給的解釋是:明知道你做的不可能比前輩做得更好,卻仍然堅持要做。

雖然有些貶義,但不乏對技術執着的人生态度。日本比我們國家的程式員更具有極客精神,從自制CPU,到自制作業系統,自制程式設計語言,生态鍊比我們完備。我們要有危機感,就像中國每年向俄羅斯訂購發動機一樣,萬一哪天不賣了,或者落後美國太多了,我們又将拿什麼去應對那時的國際形勢?

好了,我們開始研究程式界的“發動機”!

通過一些資料可以了解gcc是開源的編譯器,預設在UNIX/Linux的一些發行版上。在windows上可以通過很多方式去擷取,比較簡單的方式為安裝msys2。

注:

msys2包含了Linux下常用的指令。

常用指令:

  • cd:目錄變更;ls:清單顯示;rm:删除;
  • tar:壓縮解壓;mount:挂載…

比較有名的實作是busybox,三百多個最常用Linux指令和工具的軟體,用來和核心互動。

Android核心為Linux,可以安裝busybox;通過chroot替換系統刷機、或裝别的系統。

安裝

1、打開http://www.msys2.org/

使用msys2建構OSG程式

2、根據需求下載下傳32位、64位版本

32位:msys2-i686-20180531.exe

64位:msys2-x86_64-20180531.exe

3、安裝

根據提示下一步安裝、不要裝在中文路徑下。

4、配置國内源

msys2提供了ArchLinux的包管理機制,使用方法類似于ubuntu的apt、redhat的rpm。為了友善國内使用者使用,一些大學、公司提供了鏡像代理。

5、啟動和更新msys2

找到msys2的安裝目錄下的etc/pacman.d目錄

使用msys2建構OSG程式
  • 編輯 /etc/pacman.d/mirrorlist.mingw32,在檔案開頭添加
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
           
  • 編輯 /etc/pacman.d/mirrorlist.mingw64,在檔案開頭添加
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
           
  • 編輯 /etc/pacman.d/mirrorlist.msys,在檔案開頭添加
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
           

6、 安裝相應平台的cmake、qtcreator

進入安裝目錄

  • 啟動

    32位啟動mingw32.exe

    64位啟動mingw64.exe

  • pacman -Sy同步源
    使用msys2建構OSG程式
  • pacman -Syu更新軟體包

    輸入y回車安裝

    使用msys2建構OSG程式

    安裝gcc工具鍊

    pacman -S mingw-w64-x86_64-toolchain

    使用msys2建構OSG程式
  • 查詢osg

    安裝前需要知道osg的軟體包名,和版本号

    使用 pacman -Ss OpenSceneGraph | grep Open

注:

直接搜尋可能會比對很多,比如會查找到osgEarth osgBullt osgQt,用grep進行過濾。

使用msys2建構OSG程式

32位Release安裝包: mingw32/mingw-w64-i686-OpenSceneGraph

64位Release安裝包:mingw64/mingw-w64-x86_64-OpenSceneGraph

32位 Debug安裝包:mingw32/mingw-w64-i686-OpenSceneGraph-debug

64位Debug安裝包:mingw64/mingw-w64-x86_64-OpenSceneGraph-debug

  • 安裝具體的軟體包(pacman -S 軟體包名)
使用msys2建構OSG程式

7、把gcc加入到環境變量

Msys32的主目錄中有mingw32\bin mingw64\bin

根據相應平台把其中的bin加入到WINDOWS 的PATH中

8、打開Windows附件指令行 輸入gcc -v,驗證是否有如下輸出:

使用msys2建構OSG程式

9、配置QtCreator建立CMake工程

建立C++項目->Non-Qt Project-> Plain C++ Application -> Build System cmake

10、編寫CMakeLists腳本,CPP代碼執行

使用msys2建構OSG程式

結語

至此,一個完整的建構過程就完成了。但同時,還有很多問題值得我們去探索,以下羅列的或許能給你提供一些思考方向~

LIST:

  • 如何在msys2中源碼編譯?
  • msys2軟體包管理是怎樣的流程? 如何自己定制軟體包?
  • msys2是如何建構出來的?
  • msys2的庫是否能用在visutal stuido中?
  • 在visual studio 中能否使用gcc , gdb去調試?—可以搜尋下visualgdb插件.
  • 在國外發行版linux,在國産作業系統銀河麒麟、中标麒麟、深度Linux 中gcc使用是否一樣?
  • 飛騰、龍芯CPU中的gcc使用?
  • 在inetl AMD CPU中能否編譯出國産CPU可以執行的程式?----交叉編譯
  • 除了gcc之外還有别的開源編譯器值得我們去研究麼?-----llvm clang.
  • C++可否編譯别的語言? —這也是本文的最後的附圖,把C++版的osg編譯為Web彙編跑在浏覽器中?