MAC/Linux编程环境经验笔记(持续汇总)

1、XCode小经验

工程路径设置(Search Paths)

  Header Search Paths:$(SRCROOT)/include

  Library Search Paths:$(SRCROOT)/lib

  $(SRCROOT)宏和$(PROJECT_DIR)宏都指xxx.xcodeproj所在的目录。

工程中引入了第三方库时,编译报错提示找不到系统函数定义?

  把工程的 "Build Setting" 中的 "Always Search User Paths" 改成 "No",否则编译器就会优先搜索第三方库中的同名系统函数,导致编译出错!

编译出来的静态库特别大

  这个问题是丁强帮我搞定的,要在工程的 "Build Setting" 中的 "Generate Debug Symbols" 设置为 "No",然后把 "Strip Debug Symbols During Copy" 设置为 "Yes",这样我原来生成48MB的.a静态库变成了4.6MB,很好!

如何分析静态库的打包内容?

  我们工程的产出是一个静态库包,如果在使用时链接出错,那么很有可能是某个包没有打进去。由于iOS静态库还需要区分不用的CPU架构模式,所以也要特别的注意下如armv7、armv7s、arm64等等,下面几个命令可以帮助分析:

// 将静态库由“fat file”抽取成“thin file”
lipo libuniplayer_sdk_d.a -thin armv7 -output libuniplayer_sdk_d_armv7.a

// 列出打包的库清单
ar -vt libuniplayer_sdk_d_armv7.a 

// 删除某个链接模块
ar -d libFreetype2.a smooth.a
// 将静态库解包成*.a文件 ar -x libuniplayer_sdk_d_armv7.a  // 查看某个文件是否包含某个函数实现体 nm 文件名 | grep 函数名 // 查看某个文件支持的架构 lipo -info ***.a

 2、命令行

# 在指定路径查找包含指定内容的文件列表
find . -name "*.xml" | xargs grep "By adjusting" -l
# 查看Mac/Linux依赖库
objdump -x *.so | grep NEEDED
原文地址:https://www.cnblogs.com/kuliuheng/p/5631393.html