Mission Planner編譯方法與問題解決

最近兩天嘗試編譯Mission Planner,結果遇到了和官方教程不一樣的地方,參考了幾篇博客,內容都比較久遠了還大多雷同,經過摸索,浪費了將近兩天的時間,總算編譯通過了。

原官方教程鏈接爲:http://ardupilot.org/dev/docs/buildin-mission-planner.html
Mission Planner源碼地址爲:https://github.com/ArduPilot/MissionPlanner
最新版Mission Planner上位機軟件下載鏈接爲:http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi

1、安裝visual studio 2017(官方教程要求15.3以上,我編譯時的環境爲15.6.5),具體操作可以參考原官方教程(其實vs2107打開工程的時候會自動掃描,如果缺少組件再自動安裝也可以)

2、下載Mission Planner源碼到本地
3、下載最新版的Mission Planner上位機並安裝(注意此版本不要與源代碼版本差別過大,源代碼1.50之前使用的是vs2013編譯,只用到了.NET4.0,源代碼1.50及以後的版本同時用到了.NET4.0(及以上)和.NETStandard2.0(這也是坑人之處))

4、找到源代碼文件夾,使用vs2017打開MissionPlanner.sln(如圖)
等工程加載完畢,在解決方案視圖中會有很多項目,有些項目的依賴性會有黃色三角,如下圖所示

初次加載大部分項目都會有這個,但是其實只有一個名爲MissionPlanner.Utilities的項目會在編譯時報錯,其他的都只會產生warning,並不影響運行,可以先不管。

5、重點找到MissionPlanner.Utilities項目,可以先編譯一遍,會發現在.NETStandard2.0框架下無法加載System.Speech,進而連續報錯,導致編譯失敗
解決辦法是:先找到該項目依賴項中的System.Speech,右鍵將其移除(不移除後續無法添加同名dll)

然後右鍵依賴項,選擇添加引用,選擇瀏覽,找到用戶文件夾下的.negut\packages\system.speech.dll\1.xx\lib\dnxcore50\lib\System.Speech.dll,選擇添加
然後找到安裝的Mission Planner上位機路徑下的System.Speech.dll,同樣添加進來。

按添加順序同時勾選上點確定
(注意順序!!!).negut文件夾下對應的是.NET4.x的dll,上位機軟件下的.dll包含.NETStandard2.0,由於vs2017默認先添加到.NET4.x,所以順序錯了依然會編譯出錯(我實驗的情況就是如此,感覺很奇葩。。。)

然後再次編譯MissionPlanner.Utilities項目發現就可以通過了,再去編譯MissionPlanner項目就可以順利通過並允許。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章