Mac Xcode4 怎么把静态库.a加到工程,并调用静态库中的函数

Mac Xcode4 怎么把静态库.a加到工程,并调用静态库中的函数,第1张

1、在Xcode中新建一个Project.选择如下图:

2、然后点next,下一步至于填写的东西随意。

创建完成后结构如下图:

3、未生成的静态库在Products下为红色,

然后随便在.h文件中写一个简单的方法sayHello

#import <Foundation/Foundation.h>

@interface TestStaticeLibrary : NSObject

-(void)sayHello

@end

.m文件内容:

#import "TestStaticeLibrary.h"

@implementation TestStaticeLibrary

-(void)sayHello{

NSLog(@"Hello OSChina")

}

@end

由于模拟器是采用i386模式进行开发的如果要在模拟器中使用静态库的话需要把iOS Device改成iphone 6.0 Simulator.然后点击run,就会生成.a文件。

引用方法:

创建任意IOS project,把刚才生成的静态库直接拖到新的项目中,结构如下:

如果只是单单加入静态库是不够的,之前生成的还有一个文件夹include,里面还带了一个.h文件,把.h文件引入项目中,最终目录结构如下:

如果不是直接拖入项目中的话可以,鼠标右键在项目中,选择ADD Files to "XXXX"

在ViewController 敲入如下代码:

#import "ViewController.h"

#import "TestStaticeLibrary.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad

{

   [super viewDidLoad]

   

   TestStaticeLibrary *t = [[TestStaticeLibrary alloc] init]

   [t sayHello]

   

// Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning

{

   [super didReceiveMemoryWarning]

   // Dispose of any resources that can be recreated.

}

@end

然后运行项目 在控制台看到以下内容

1、将下载下来的sdk中的inc文件夹、mapapi.bundle、libbaidumapapi.a添加到工程中,其中libbaiduapi.a有两个,一个对应模拟器一个对应真机,导入方法如下:

第一种方式:直接将对应平台的.a文件拖拽至XCode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都需要重新添加.a文件;

第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可,具体命令如下:

lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a

第三种方式:

1.将API的libs文件夹拷贝到您的Application工程跟目录下

2.在XCode的Project ->Edit Active Target ->Build ->Linking ->Other Linker Flags中添加-ObjC

3.设置静态库的链接路径,在XCode的Project ->Edit Active Target ->Build ->Search Path ->Library Search Paths中添加您的静态库目录,比 如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator

我是用第二种方法,在真机和模拟器下都可以调试。

2、因为静态库采用Object C++实现,所以在工程中至少要有一个.mm的文件存在(可以把appdelegate.m改为.mm)

3、导入工程所需的框架:CoreLocation.framework,QuartzCore.framework,OpenGLES.framework,SystemConfiguration.framework

4、在AppDelegate中添加BMKMapManager对象,这里要在百度地图api网站上申请一个应用key

AppDelegate.h文件如下:

[cpp] view plain copy

#import <UIKit/UIKit.h>

#import "TestViewController.h"

#import "BMapKit.h"

#define BaiduMapKey @"A56A733C30B159166B74AD41530CB013685035F9"

@interface AppDelegate : UIResponder <UIApplicationDelegate>{

BMKMapManager* _mapManager

}

@property (strong, nonatomic) UIWindow *window

@end

AppDelegate.m文件如下:

[cpp] view plain copy

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

{

_mapManager = [[BMKMapManageralloc] init]

BOOL ret = [_mapManagerstart:BaiduMapKey generalDelegate:nil]

if (!ret) {

NSLog(@"BMKMapManager start failed!")

}

self.window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]

// Override point for customization after application launch.

self.window.backgroundColor = [UIColorwhiteColor]

TestViewController *root = [[TestViewControlleralloc] init]

self.window.rootViewController = root

[self.windowmakeKeyAndVisible]

returnYES

}

到这里,如果工程可以正常编译,则说明相关设置已经成功了。。下面就可以用百度地图api了。。。

新建一个iOS的空项目:这个非常的简单就不说了,然后建立一个要使用的库文件:

然后添加一个静态库的工程,这个工程就是你静态库函数,你可以在里面写任何你需要的函数:

现在如果你要编译原来的TestUseLib工程的时候是编译不过去的,你需要添加的地方有几个:图片文件上传不了描述一下:

选择工程文件(不是库文件)在targets下选择工程的一个target

然后在Build Phases列中设置:Target Dependencies加上那个库工程,以及在

Link Binary with Libraries加上那个库工程的库文件(.lib)

同时设置.h文件路径:

在build Setting列中的Search Paths下的header Search Paths加上头文件的查找路径:

你可以写绝对路径,但是这样不好,只能在自己的机器上运行,到别人的机器上去了就会有问题:

$(SRCROOT)这个东西表示工程的根路径,其实也就是你在建立工程的时候选择的那个路径。

这就是静态库的使用。

如果你现在需要引用别人的一个.a库,那就更加简单了,你只需要将.a文件和.h文件放到你的工程目录下,然后将.a文件与.h文件拖动到xcode的工程中就可以了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11742020.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存