I can believe fly.

Tuesday, May 23, 2017

iOS 静态库/动态库/ Framework


静态库

静态库即静态链接库,Windows 下的 .lib,Linux 和 Mac 下的 .a。
静态库的代码在编译过程中就被载入目标程序,因此目标程序的体积会比较大。
iOS静态库形式:.a和.framework(我们自己建立的)。

动态库

动态库即动态链接库,Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib/.tbd。
动态库编译时只是引用,是在程序运行时候才加载的,因此不影响目标程序的体积。
iOS动态库形式:.dylib和.framework(属于系统的)。

iOS Framework
framework实际上是一种打包方式,将库的二进制文件,头文件和有关资源文件打包一起。
在iOS8之前,iOS平台不支持使用动态Framework; iOS8/Xcode 6推出后,才添加了动态库的支持,同时Xcode6也原生自带了Framework支持(动态和静态都可以)。

 CocoaPods支持
纯ObjC里,多数都是使用静态库.a来集成。建立private repo,  提供podspec配置


如果想集成Framework,podspec使用s.vendored_frameworks配置


对于 Swift 项目,CocoaPods 提供了动态 Framework 的支持,在podfile里要使用use_frameworks!


参考资讯





Monday, May 8, 2017

编译directx-jun2010的Effects11工程引发的问题

Microsoft DirectX SDK (June 2010)简称directx-jun2010
在编译directx-jun2010\Samples\C++\Effects11\Effects11_2013.sln工程出错:


找不到directx-jun2010自己相关的头文件,查了一下工程的配置属性,发现VC++目录里使用到环境变量DXSDK_DIR,
由于在构建环境里,directx-jun2010是在其它环境安装后直接拿数据来用的,这就导致了DXSDK_DIR是不存在的。



我是使用nant脚本编译工程的,试着在编译前增加DXSDK_DIR的环境变量,但这对VC来说是不生效的


查询了devenv语法(https://msdn.microsoft.com/zh-cn/library/ms241275.aspx),发现它有一个开关/useenv, 作用是将环境变量加载到“VC++ 目录”对话框中。我尝试着将vccompile改为vccompile_useenv。


结果出现另一个错误


需要调用vsvars32.bat重新初始化VC的环境变量

exec不在同一个进程里,vsvars32.bat的调用无效。
最后,尝试重新设置INCLUDE,LIB环境变量以便工程编译中能找到相关的依赖文件,以下是编译脚本