FlightGear編譯小結

2021-05-12 14:28:35 字數 2642 閱讀 6923

養成寫blog的習慣,把平時遇到的一些有價值的事情記錄下來,這並不是每個人都能做到的。由於推免沒能推到自己第一想要的方向,退而求其次,我就來到嵌入式方向,並且畢業設計也在這邊的實驗室做,安排的任務跟計算機圖形有關係,更具體一點跟飛行模擬器(flight simulator)有關係,這樣就接觸了flightgear。編譯flightgear確實是一件費心的事情,下面記錄一點跟編譯過程有關的事項,注意要想成功編譯flightgear,只看我這個小結是萬萬不能的,因為與每個人選擇的flightgear、simgear、openscenegraph、3rdparty、plib、編譯工具以及作業系統都有關係。

當決定要編譯flightgear時,第一件要做的事情是確定要編譯的flightgear是什麼版本,然後決定別的依賴庫採用什麼版本。這裡我選擇flightgear 1.9.1,需要使用simgear 1.9.1來編譯flightgear 1.9.1,openscenegraph的版本是2.8.1,plib的版本必須是1.8.5或者以上。當確定了這些以後,我們就需要知道這些依賴庫放置在**才能使得編譯flightgear時能夠找得到,此時可以參考網上的一些例子,但是更好的方法是開啟flightgear源**裡面的解決方案檔案,例如我開啟flightgear 1.9.1源**裡面的flightgear.sln(flightgear/projects/vc8):

就只有4個專案。右擊flightgear檢視其屬性->c/c++->常規,有乙個附加包含目錄:

看看這些值,就知道應該把依賴庫的包含檔案放在**。當然我們也可以改變這些值,然後再把包含檔案放在相應改變後的位置,只要編譯時找得到就ok。同時還有鏈結時的依賴庫的lib檔案的位置(屬性->鏈結器->常規):

這樣在出現問題時就不會擔心是不是因為把相關檔案放錯位置了。

真正開始編譯時,所謂的順序其實就是先把相關包含檔案和lib檔案編譯出來,這樣在編譯flightgear 1.9.1時不會出現編譯錯誤以及後面的生成階段時不會出現鏈結錯誤。檢視屬性->鏈結器->輸入:

flightgearlib.lib

simgear.lib

fnt.lib

js.lib

net.lib

psl.lib

puaux.lib

pui.lib

pw.lib

sg.lib

sl.lib

ul.lib

osgdbd.lib

osggad.lib

osgviewerd.lib

osgutild.lib

osgparticled.lib

osgtextd.lib

osgd.lib

openthreadsd.lib

libjpeg.lib

pthreadvc2.lib

alut.lib

openal32.lib

glu32.lib

opengl32.lib

winmm.lib

zlib.lib

wsock32.lib

advapi32.lib

comdlg32.lib

shell32.lib

user32.lib

最後編譯flightgear時,有乙個事項要闡述一下。就是工程裡面有些檔案在磁碟上是不存在的,此時就會報c1xx錯誤,消除這些錯誤就是在工程裡面把相關檔案刪除,然後鏈結時就有許多的」找不到符號」的錯誤,這是因為磁碟上有該檔案,只是沒有加到工程裡面來,所以就根據符號找到定義它的檔案,然後加到工程裡面來,最後需要忽略msvcrt.lib、libcmt.lib這兩個庫檔案,到這裡你就可以飛起來了。

希望給編譯flightgear的朋友們一點幫助。如有疑惑,歡迎交流,倘有錯誤之外,懇請指正。

胡靖飛

條件編譯小結

源文 編碼的時候經常要用到條件編譯,每次都到網上去查比較浪費時間,今天總結一下以備後用 visual c ifdef msc ver 非vc編譯器很多地方也有定義 borland c ifdef borlandc unix windows windows 95 98 me的ver win32 win...

C 編譯小結

一 靜態鏈結庫和動態鏈結庫的區別 1 動態鏈結庫有利於程序間資源共享 c語言的標準庫是動態鏈結庫,也就是說系統所有執行的程式共享著同乙個c語言標準庫的 段。而靜態庫則不同,如果系統中多個程式都要呼叫靜態庫中的函式,則每個程式都要將這個庫函式拷貝到自己的 段中,這顯然將占有更大的記憶體資源。2 動態庫...

條件編譯小結

編碼的時候經常要用到條件編譯,每次都到網上去查比較浪費時間,今天總結一下以備後用 visual c ifdef msc ver 非vc編譯器很多地方也有定義 borland c ifdef borlandc unix windows windows 95 98 me的ver win32 window...