1. 程式人生 > >OSX + OGRE + XCode的編譯、生成和除錯執行中的錯誤記錄

OSX + OGRE + XCode的編譯、生成和除錯執行中的錯誤記錄

OSX + OGRE + XCode的編譯、生成和除錯執行中的錯誤記錄

由於蘋果的Macbook Pro 實在是太小巧方便了。入手一個,ogre原始碼在這裡建立,並運行了。

一、搭建環境

ogre :1.9.0
Mac OS :MacOS High Sierra 10.13.6
Xcode: 9.4.1
Make:3.12.4

具體編譯生成的步驟還是省略了吧。剛剛我寫了一遍發現和Windows下面一樣,就是生成時候的編譯環境的平臺選擇不一樣。其它大體相同。而且也有一些相關的網頁。
我參考了一些具體連結如下。

https://blog.csdn.net/u012419410/article/details/42468817?utm_source=blogxgwz1
https://blog.csdn.net/u012419410/article/details/42468995
https://www.cnblogs.com/kiscall/p/5361738.html
http://wiki.ogre3d.org/tiki-index.php?page=Building Ogre3D 1.9 Statically in Mac OS X (Yosemite)

這裡還是主要記錄一下,我這些天犯的各種白痴和不白痴的錯誤吧。

二、錯誤和解決方法的記錄

錯誤1:

Ogre_iOS_7.0_Dependencies_20140315.dmg檔案打包了,iOS平臺上的依賴檔案庫和標頭檔案夾。
Ogre Templates for Xcode 4.pkg 檔案執行後將在Xcode平臺上安裝一個外掛,這個外掛用於建立iOS的ogre專案。新建專案的時候有相關選項可以選擇。

依賴庫原始碼下載:
https://sourceforge.net/projects/ogre/files/ogre-dependencies-mac/

所以上面兩個裡面都沒有依賴庫的原始碼。

錯誤2:

Xcode 10 蘋果摒棄了對libstdc++庫的支援轉而支援libc++庫了。所以會出現一些相關的錯誤。如找不到對應的標頭檔案,或者庫的連結錯誤。
其中推薦標記那個,很貼心的提供了替換包的下載地址,而且下載包裡面有說明文件,看說明文件,直接執行裡面的install.sh檔案,直接拷貝到對應目錄。簡直是貼心暖男。
參考文章連結如下:

http://www.cocoachina.com/ios/20181024/25280.html
https://awhisper.github.io/2018/06/08/libstdc-inxcode10ios12/
https://www.jianshu.com/p/6d94278d62b3 (推薦)

錯誤3:

編譯ogre原始碼的時候出現不支援i386的提示,將編譯中的architectuires 改為標準的。如圖:
在這裡插入圖片描述

錯誤4:

Undefined symbols for architecture armv7:
“std::__1::__vector_base_common::__throw_length_error() const”…

在這裡插入圖片描述

在這裡插入圖片描述

錯誤5:

Undefined symbols for architecture x86_64:
“OIS::InputManager::createInputObject(OIS::Type, bool, std::string const&)”, referenced from:
OgreBites::SampleContext::createInputDevices() in SampleBrowser.o
“OIS::InputManager::createInputSystem(std::multimap<std::string, std::string, std::lessstd::string, std::allocator<std::pair<std::string const, std::string> > >&)”, referenced from:
OgreBites::SampleContext::setupInput(bool) in SampleBrowser.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

新增 libois庫也不管用。查詢一下檔案說是不同版本庫重複安裝,這裡呼叫錯誤導致的。
終於找到解決方法了。
關鍵是編譯使用了不同版本的c++基礎庫的原因。
在OIS庫的專案配置裡面降低基礎庫的版本就好了。
如下圖所示,修改c++語法的方言和標準庫呼叫。原來是C++11,現在改成C++98,對應的標準庫也從原來的libc++改為現在的libstdc++。

在這裡插入圖片描述

這樣就和呼叫這個ois庫的SampleBrowers的配置統一了,專案編譯時候的很多警告也就沒有了。專案編譯執行成功。
具體為什麼這樣改和這兩個配置專案的意義,見下面連結的文章。
《從Xcode10不再支援libstdc++說起》
http://www.cocoachina.com/ios/20181024/25280.html
這裡說的比較系統,而且條理清晰。

到這裡ogre中Macbook 上,通過Xcode的build的我就編譯執行通過啦~~撒花慶祝