1. 程式人生 > >在編譯工程時,有時會遇到類似“ld: library not found for -l…” 的錯誤提示

在編譯工程時,有時會遇到類似“ld: library not found for -l…” 的錯誤提示

1.遞迴刪除指定目錄下的 .git、.svn 檔案
find . -name .git | xargs rm -fr
find . -name .svn | xargs rm -rf


第一條倒還不常用,因為用 git 做版本管理的時候,
只在根目錄下生成一個 .git 目錄,刪掉這一個就行了~
因此,刪除 .git 字需要 rm -rf .git 命令就夠了。

第二條才是真的,svn 做版本管理的時候,受管理的每個目錄下面都會有一個 .svn 隱藏目錄。
因此,如果要去掉 svn 檔案的話,則上面的第二條命令乃不二之選~

2.Versions for Mac 忽略檔案設定
一、開啟配置檔案 mvim ~/.subversion/config


二、找到 global-ignores 一行,去掉註釋,編輯成:
global-ignores = build *~.nib *.so *.pbxuser *.mode(在此新增呢要忽略的檔案字尾)
三、找到 enable-auto-props = yes 把註釋去掉
(讓立即生效?這條沒有試過,當時按第二條改了以後發現還是沒有反應)

3.ld: library not found for -lcurl
XCode 裡面有時候會報出如下的錯誤(今天我就遇到了一遭):
clang: warning: argument unused during compilation: '-websockets'
ld: library not found for -lcurl
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解決方案:
第一時間點選 XCode 工程檔案,在 Build Phases 中檢視 “Link binary With Libraries” 
如果不出所料,你應該能發現有一到數個的條目是用紅色字型來顯示的。
什麼意思?被工程引用的這些檔案,其物理檔案已經不處於之前所記錄的地方了。
怎麼辦?右鍵點選紅色條目,選擇 “Reveal in Project Navigator”,
此時大抵能在左側欄中定位到缺失檔案所在的路徑,接下來就好辦了,找到缺失的檔案,挪回它應該待的地方。

4.ld: library not found for -lcurl
現象:在編譯工程時,有時會遇到類似“ld: library not found for -l…
” 的錯誤提示。
原因:通常這是由於工程在編譯時找不到需要的連結庫而導致的。
解決方法:
一般可以通過如下的方法解決,在工程的 Target 中選中要執行編譯的某個target,
然後 “get info”,開啟 Build 設定頁面,在 “Library Search Path” 中新增缺失連結庫的所在資料夾的路徑即可。

5.安裝 Versions for Mac 以後,全域性忽略的列表中預設是包含 *.a 檔案型別的
這樣可能會導致一些問題,就拿 cocosd-x 庫來說吧,
cocos2d-x 建立的模板工程中就包含著三個 .a 型別的檔案:libcurl.alibwebp.alibwebsockets.a
如果用 Versions 來做版本管理的話,這些 .a 檔案就可能被跳過。
當其他人從 svn 伺服器 checkout 該工程進行編譯的時候,就可能會出現上一點中所描述的情形。

6.svn 預設 ignore(忽略)一些檔案,例如 “*.o”,怎麼取消這種預設忽略讓檔案能正常提交呢?
切換到指定目錄,使用 “svn add * --force --no-ignore” 命令即可。
其中,“--no-ignore” 是取消忽略,“* --force” 是添加當前目錄及所有子目錄下的所有檔案。

7.受版本控制的工程,對其做貼上目錄的操作須謹慎!
如果貼上進去的某個目錄中也包含了 .svn 隱藏目錄,就可能會導致目標工程的版本控制出錯,
直觀的表現就是某目錄下明明存在一些檔案,但在 Versions 中卻看不到,日常的 svn 操作也可能會受到一定的影響。

怎麼解決這個問題?在控制檯下切換到出問題的目錄,使用 “find . -name .svn | xargs rm -rf” 命令即可。