liyongdeMacBook-Pro:~ ly$ brew update
Error: /usr/local is not writable. You should change the
ownership and permissions of /usr/local back to your
user account:
sudo chown -R $(whoami) /usr/local
在終端使用sudo chown -R $(whoami) /usr/local回車后輸入電腦密碼即可
```base
#獲取執(zhí)行權(quán)限
chmod 777 ~/.test.sh
chmod 777 絕對路徑
#編輯文件
sudo nano 文件的絕對路徑
## Other Linker Flags
解決方法在背景那塊我就提到了裙盾,就是在Other Linker Flags里加上所需的參數(shù),用到的參數(shù)一般有以下3個(gè):
-ObjC
-all_load
-force_load
下面來說說每個(gè)參數(shù)存在的意義和具體做的事情。
首先是-ObjC,一般這個(gè)參數(shù)足夠解決前面提到的問題,蘋果官方說明如下:
This flag causes the linker to load every object file in the library that defines an Objective-C class or category. While this option will typically result in a larger executable (due to additional object code loaded into the application), it will allow the successful creation of effective Objective-C static libraries that contain categories on existing classes.
簡單說來畏浆,加了這個(gè)參數(shù)后,鏈接器就會把靜態(tài)庫中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中,雖然這樣可能會因?yàn)榧虞d了很多不必要的文件而導(dǎo)致可執(zhí)行文件變大懂讯,但是這個(gè)參數(shù)很好地解決了我們所遇到的問題。但是事實(shí)真的是這樣的嗎台颠?
如果-ObjC參數(shù)真的這么有效褐望,那么事情就會簡單多了勒庄。
Important: For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. The workaround is to use the -allload or -forceload flags.
當(dāng)靜態(tài)庫中只有分類而沒有類的時(shí)候,-ObjC參數(shù)就會失效了瘫里。這時(shí)候实蔽,就需要使用-all_load或者-force_load了。
-all_load會讓鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中谨读,但是千萬不要隨便使用這個(gè)參數(shù)局装!假如你使用了不止一個(gè)靜態(tài)庫文件,然后又使用了這個(gè)參數(shù)劳殖,那么你很有可能會遇到ld: duplicate symbol錯(cuò)誤铐尚,因?yàn)椴煌膸煳募锩婵赡軙邢嗤哪繕?biāo)文件,所以建議在遇到-ObjC失效的情況下使用-force_load參數(shù)哆姻。
-force_load所做的事情跟-all_load其實(shí)是一樣的宣增,但是-force_load需要指定要進(jìn)行全部加載的庫文件的路徑,這樣的話矛缨,你就只是完全加載了一個(gè)庫文件爹脾,不影響其余庫文件的按需加載。