你的位置:首页 > 操作系统

[操作系统]改错总结(1)


Vesions ignore & 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” 命令即可。