不要用learnopengl-cn官网给的SOIL下载地址,可以去https://github.com/DeVaukz/SOIL下载针对macOS优化过的SOIL。下载下来长这样?
如果仅仅是在Xcode中添加SOIL.h头文件的地址,会得到编译错误:
原因出在没有添加动态链接库,所以我们的目的就是要生成.dylib文件。terminal中执行步骤如下:
1. cd到下载文件的build文件夹
2. cmake .. -G "Unix Makefiles" (cmake是一个跨平台编译工具,可移步http://cmake.org下载。cmake命令的功能是把写好的CMakeLists.txt文件转化为make命令所需要的makefile文件)
此时长这样?
3. make (功能是编译源码生成可执行程序或共享库)
4. make install
最后长这样?
至此就生成了我们翘首以待的.dylib文件!在Xcode的Library Search Paths里添加动态链接库的路径并拖一个.dylib文件到Link Binary With Libraries中,就可以愉快地使用SOIL.h啦!
----------------------------------------
但实际配置过程是困难重重,折腾了将近一天,网上相关的方案几乎都尝试了一遍,每次总是在感觉快完事的时候出现新的问题,最后还是向同学求助才得以解决。凌晨一点在心里大声欢呼,心情大概就是“又可以排其它的bug了!开心!”:)
问题及解决:
1. cmake指令无法顺利generate,给出一些类似下图的warning,如果无视warning继续make就会报错
有人执行sudo xcode-select --reset有用,不过我是去苹果官网https://developer.apple.com/download/more/?=xcode下载Xcode对应的Command Line Tools安装之后才顺利generate的。
2. make指令报错
报错看起来和32位被弃用有关,网上有说Xcode 9.4及之前的版本可以编译32位,然而在卸载Xcode10下载Xcode9之后悲惨地发现对应的Command Line Tools 9系列并不能在macOS 10.14安装,只能另寻出路。
尝试在步骤2中使用README里提到的cmake .. -G Xcode,得到generating done后长这样?
打开SOIL.xcodeproj,如果能运行的话就可以生成我们期盼的库文件。然而:
它说targets被configure for 32-bit,而macOS 10.14 Xcode10中i386已被弃用,也就是我们只能编译64-bit的,所以回头检查cmake之前的步骤,看能不能configure成for 64-bit的。打开CMakeLists.txt,两个i386赫然入目:
重新下载SOIL,删掉CMakeLists.txt中的i386字眼后再执行开头4步,终于成功了。
-------------------------------------------
个人总结:
1.保持头脑清醒,不要十一点才开始搞然后折腾到一点,白天那么多时间干嘛去了,少看手机。
2.不要瞎试、反复试同样的方法,要动脑分析问题的原因,从报错中提取信息。
3.如果花了一个下午都解决不了,就别再自己蒙头搞了,向周围同学寻求帮助也不是啥难事。将心比心,有人向我求助我也会热心帮忙的嘛。脸皮要厚一点。
4.花很多时间还解决不了问题,别丧,这很正常啊,你看网上那么多搜同样问题的人,you are not alone, 主动调节心情,跑步洗衣服看看书都可,别给自己找理由偷懒。
5.虽然花了快一天才配好SOIL,但尝试解决问题的过程中接触了不少新东西。比如cmake、补丁文件(diff与patch命令的使用)。一开始连自己要解决的到底是啥都懵懵的无脑搜,后来才慢慢清晰起来。也是这几天学OpenGL集中配置环境才算是对Xcode熟悉起来(头文件路径、lib路径、拖文件到Link Binary With Libraries),上学期配sqlite、gtk倒腾了几天但也做没技术上的总结。在图书馆拿了本《Xcode江湖录》,记下了些小知识:.a是静态库,.dylib是动态库,framework是框架,bundle是包。Xcode有专门管理库的工具Cocoa,博大精深,有待使用。playground只能用swift,算是实时编译的交互式开发环境,可翻译成训练场。
6.认真阅读README,代码都可以点开看看,比如这次要打开cmakefile才会找到问题。阅读英文应当是一件非常自然流畅的事。