`
anlulu
  • 浏览: 43420 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xcode制作静态库

    博客分类:
  • ios
阅读更多

最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的框架,估计也是类似动态库的实现,不过没有具体研究过,后续继续深入研究。

我这个文档的静态库的开发是基于Xcode4.2和iOS SDK5.0编写的。Xcode4跟之前的Xcode3还是有不少的差别的。

下面就简单写一个静态库和一个调用静态库的例子。

静态库的编写:

1.静态库工程的建立:

Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个Print这样的工程。

2.工程建立

我们添加很简单的"- (void)printA;"和"+ (void)printB;"的方法,这个方法的实现也是很简单的,在*.m文件中的实现就是一个"NSLog(@“”);"这样我们编译出来的libstaticlib就可以被其他的IOS工程进行调用了。这块注意一下,目前我们的Print->iOS Device

 

3.编译前准备

这里分release与debug版本,需要设置一下

4.OK,编译

我们可以在Products下面找到我们编译生成的libstaticlib.a这个文件。

注意未编译前为红色:左 编译后为黑色: 右

 

 

5.ok

在右边 这个文件上右键Open In Finder。这时候我们打开了一个文件夹,里面有一个libPrint.a。后面我们继续编写一个调用这个libPrint.a的App。但是这个App在编译时候会出错,通过这个错误的解决,说明Xcode的一些编译相关的东西。这里,我们在command下面根据路径找到这个文件,用这个非常重要的命令查看一下这个lib的信息!

打开终端写入如下命令:这是什么?这就是所在的路径

以下均是在自己的mac上的路径。你需要将/Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/ 替换成你的路径。

cd /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/

我们手动打开这个路径:可以看到如下信息:Release-iphoneos

 

这个是给真机用的,那我们要给模拟器和真机封装的静态库应该都能用才好。这个下面介绍!!!!!

 

然后再在终端 打开这个文件:cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products/Debug-iphoneos

命令是:lipo -info libPrint.a,可以看到显示的结果是:Arch是 Arm7。下面我会具体介绍一下。

6.建立一个调用这个libPrint.a的应用

应用就很简单了,我们添加刚才libPrint.a的*.h文件。 然后在这个工程的Build Phases的Link Binary With Library里面添加我们刚才拷贝出来的那个libPrint.a。

 

7.插入了h和a文件后

我们就可以在control里面调用这个libPrint.a 函数了。

#import "AstroDiskAppDelegate.h"

#import "Print.h"

 

 

@implementation AstroDiskAppDelegate

 

@synthesize window = _window;

 

- (void)dealloc

{

[_window release];

[_viewController release];

[super dealloc];

}

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

 

//调用libPrint.a

[Print printB];

Print *print = [[[Print alloc] init] autorelease];

[print printA];

 

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

[self.window makeKeyAndVisible];

return YES;

}

 

 

8.OK,编译运行这个应用程序。

编译出现错误了。这个就是这篇文档的关键了。主要就是为了介绍编译静态库相关的东西。

 

9.可以看到undefine symbols for architecture i386这样的错误。

其实这个错误原因很简单,就是因为,我们用错了编译出来的libUITab.a lib,在模拟器里面,我们需要的是基于i386构架编译的static lib,但是这个a文件,大家还记得前面说的arm6 arm7构架的么。这个a其实是在iphone这个arm构架上运行的代码。其实show in finder指向的是一个ios device的库,并不是i386模拟器下的库。那如何编译i386的库呢?看见第二张图片的Print>IOS Device了么?我们将这个iOS Device修改成iPhone5.0 Simulator。在进行编译,这样就可以编译出i386下面的库。这个时候我们show in finder打开的文件夹还是ios device下的库。我们最好自己去那个目录下看一下。这里我们用command去查看了一下目录情况,如下:可以看到一个iphoneos的目录和一个simulator的目录。

 

然后我们再看看这个目录与第4条所示的目录有什么不同! 同样也有一个libPrint.a文件。

 

10.错误原因分析

Release-iphoneos里面的是基于arm6 arm7编译出来的库文件。Release-iphonesimulator文件夹下面的是基于i386编译出来的文件。

11.合并.a文件,制作通用静态库

这二个库一个是用于真机运行的一个是用于模拟器运行的.其实我们可以利用lipo将这二个文件打包成一个通用的a文件。命令如下:

将/Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替换成你的路径。

将/Users/user/Desktop/libPrint.a替换成合并后的路径。

lipo -create /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/libPrint.a /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/libPrint.a -output /Users/pjk1129/Desktop/libPrint.a

 

12.打包以后的库文件,我们查看信息

然后打入如下命令:lipo -info /Users/pjk1129/Desktop/libPrint.a

可以看到如下信息:


如上,你已经看到了,它具备了i386和arm7的条件。 现在我们这个静态库,支持的构架已经是armv7 i386了。

 

13.ok,经过上述步骤后

这个通用库生成后,我们将原来,调用这个库进行替换一下,在进行编译,成功编译,运行结果如下所示:

分享到:
评论

相关推荐

    xcode 制作静态库

    ### Xcode 制作静态库详解 #### 引言 在iOS开发中,静态库的创建与使用是一项基本但至关重要的技能。静态库允许开发者将常用功能或代码片段封装起来,便于在多个项目中重复利用,同时也有助于保护源代码不被他人...

    iOS-Xcode制作静态库

    在iOS开发中,Xcode制作静态库是一种常见的技术实践,它可以帮助开发者封装代码,提高代码重用性,减少项目体积,提升应用性能。本篇将详细介绍如何使用Xcode创建和使用静态库。 首先,理解静态库的概念至关重要。...

    xcode 4 制作静态库图文详解

    本文主要介绍如何使用Xcode 4.2创建静态库以及如何在其他项目中使用该库。 首先,创建静态库工程: 1. 打开Xcode,选择“New Project”,在iOS类别下找到“Framework & Library”,然后选择“Cocoa Touch Static ...

    Xcode制作包含xib等资源的静态库

    Xcode制作包含xib等资源的静态库的流程如下: 1. 创建静态库工程: 在Xcode中新建一个项目,选择“iOS”->“Framework & Library”->“Cocoa Touch Static Library”。点击“Next”,输入项目名称和位置,创建新...

    IOS 入门开发之使用Xcode4制作静态库详解(五)

    本篇将深入讲解如何使用Xcode4来创建静态库,这尤其适用于开发者希望共享代码或者创建可重用的模块。 首先,我们需要了解什么是静态库。静态库在编译时会被完整地链接到目标应用中,成为应用程序的一部分。这意味着...

    制作静态库、动态库Framwork

    下面我们将详细探讨如何制作静态库和动态库Framework,以及打包Framework的脚本。 首先,我们来看静态库。静态库在编译时会被链接到目标应用中,成为应用程序的一部分。这意味着静态库中的所有代码和资源都会被包含...

    iOS静态库制作实例

    本实例主要探讨如何制作包含Category的iOS静态库,解决静态库中对Category的使用问题。 首先,让我们了解Category在Objective-C中的作用。Category是Objective-C的一个强大特性,允许我们扩展已有类的功能,而无需...

    制作静态库所用到的资料

    本资料主要涉及Objective-C(OC)语言制作静态库的过程,以下是详细的知识点讲解: 一、静态库与动态库的区别 1. 静态库:在编译时会被链接到目标程序中,成为可执行文件的一部分。这意味着程序较大,但运行时不...

    Xcode15+Swift+制作XCFramework

    - **合并框架**:利用`xcodebuild`命令行工具,使用`-create-xcframework`选项将所有构建的静态库合并成一个XCFramework文件。 - **发布和使用**:将生成的XCFramework文件分享给其他开发者,他们可以直接在他们的...

    IOS 静态库打包流程简化详细介绍

    在iOS开发中,静态库是一种常见的组件化方式,它允许开发者将特定的功能模块打包成一个独立的库,供其他应用或SDK使用。然而,传统的静态库打包过程繁琐,需要手动合并.a文件、拷贝头文件并打包。本文将详细介绍如何...

    手把手教你制作.a静态库(iOS开发) - 简书1

    iOS 静态库制作详解 iOS 开发中,静态库(Static Library)是一种非常重要的资源,它可以将多个对象文件(Object File)打包成一个文件,以便于在多个工程中重复使用。下面我们将手把手教您制作一个简单的静态库。 ...

    Xcode创建和使用iOS的dylib动态库

    与静态库不同,静态库会在编译时将代码合并到目标程序中,而dylib则允许程序在运行时按需加载和使用库,减少了应用程序的体积。此外,dylib的更新不会影响到已安装的应用,只需要更新库本身即可。 二、创建dylib...

    ios静态库问题

    ### iOS静态库问题详解 #### 一、概述 在iOS开发过程中,静态库的应用非常广泛。它可以有效地将一些通用的功能封装起来,便于多个项目共享,同时也能够保护代码不被轻易查看。本文旨在分享在制作iOS静态类库的过程...

    iOS制作framework静态库图文教程

    本文将详细讲解如何制作适用于iOS的静态库——framework。静态库与动态库相比,其优势在于它会将所有依赖代码编译进最终的应用程序中,避免了运行时加载动态库可能导致的问题,特别是对于App Store的提交,静态库是...

    【转】如何制作,编译,使用静态编译库

    1. **配置Xcode项目**:在Xcode中,你需要导入静态库的源代码或者已编译的库文件,并将其添加到项目的构建阶段。 2. **设置依赖项**:确保在项目的Build Phases中,静态库被正确地链接到Target的Link Binary With ...

    IOS应用源码Demo-超详细图文介绍如何制作,编译,使用静态编译库-毕设学习.zip

    6. **图文教程**:压缩包中的超详细图文介绍,会一步步指导如何配置Xcode项目,添加静态库,解决依赖问题,以及如何编译和运行应用。这对于初学者来说是非常有价值的资源。 7. **毕业设计与论文**:在毕业设计中,...

    IOS应用源码之【应用】-iOS framework 制作教程【非静态包】.rar

    本教程将重点讲解如何制作一个非静态的iOS框架,这涉及到动态库的创建,相比于静态库,动态库可以减少应用程序的大小,因为它们在运行时才被加载。以下是关于iOS框架制作的详细步骤和相关知识点: 1. **了解框架...

Global site tag (gtag.js) - Google Analytics