当前位置:首页 » 编程软件 » ios编译a

ios编译a

发布时间: 2022-09-27 10:30:45

① ios 为什么两个.a冲突 去掉一个的冲突文件后又编译找不到 cocoachina

貌似你开了两个一样的问题。丢文件是因为-o选项,\334多半是因为输入法的问题,带入了看不见的非标准字符。而且问题出在ticket.h,把那个头文件的第一行删掉重新输入一遍试试 gcc的-o选项是制定输出文件名,你把输出文件名制定成了ticket.h

② iOS 编译报错

你的某一个字典是不可变类型的,非法使用了setObject: forKey:这方法,解决方案:把你的字典类型改为可变的NSMutableDictionary 或者取消setObject: forKey:在个方法

③ ios a静态库创建需要注意什么

在开发过程中,经常会碰到一些在不同工程中经常用到的部分,把这些部分抽取出来做成一个静态库往往是一个比较好的做法。xcode里就有制作静态库的模板,相关的制作步骤网上也有很多,但在实际的操作中,还是有不少细节方面需要注意。以下是我碰到的一些问题总结。

1.编译release版本的库
在“Manage Schemes”中,将“Build Configuration”的选项改为“Release”即可。如图:

2.静态库中包含category
如果你在静态库工程中使用了category,那么你可能会碰到链接问题,解决的办法就是需要同时在生成静态库的工程和使用静态库的工程中使用“-all_load”编译选项,即在对应target的"Build Settings"中的“Other Linker Flags”选项添加“-all_load”。注意:使用静态库的工程中是一定要加该编译选项的!!至于生成静态库的工程中加不加没有试过,不过建议还是加上该编译选项。

3.静态库支持的SDK版本
为了使自己的静态库尽可能多的支持IOS的系统版本,应该在"IOS Deployment Target"这个选项中选择自己所需的IOS版本。设置如下图,这个是我的静态库工程中的配置,红框框起来的是我修改过的选项。

4.自动拷贝头文件
在工程对应的target的“Build Phases”下添加“Copy Headers”的选项。该选项默认是没有的,添加方法是点击下方的“Add Build Phase”按钮后选择后即可添加。该选项下有3个子选项,分别是Public,Private,Project。通过点击下方的加号,可以将工程中的头文件添加到“Project”中,在其中的对应头文件点击右键,选择“Move to Public Group”,当头文件移到“Pulic”后,编译工程以后,在工程编译后.a文件所在的路径下,会同时出现一个"usr/local/include"的文件夹,其中的头文件就是public group中的头文件。这时只需将.a文件和这个路径下的头文件拷贝到所需工程文件即可。
转载

④ 如何把iOS代码编译为Android应用

看开发时使用的什么模式。
如果是使用object C,那没法跨平台编译,也就无法直接转换。
如果使用的一些支持跨平台的第三方库,比如cocos2dx,那在安卓和ios下都是可以编译的。

一款名为“J2ObjC”的源代码转换工具,可将Java语言编写的程序转换称Object-C语言,并直接使用iOS框架,这意味着Android上的程序可以直接转换成iOS App。

⑤ ios中怎么调用a文件里的内容

ios中后缀名为a的文件是编译好的二进制文件,一般是第三方为了保密代码而使用的。a文件里边的内容是没法看懂的,只有配合.h头文件,知道它有哪些暴露出来的属性或者函数才能调用。调用方法和平时使用 .h .m 文件一样,只是你看不见.m里边的代码而已。

⑥ ios开发怎么打包成.a文件含有其他的动态库

iPhone如何打包成一个通用的静态库文件(模拟器和真机都可以用)?

1.先来一个必须的命令:
~/Library目录在lion下是默认隐藏的。这样很不方便。用一下命令可以使其显示:
chflags nohidden ~/Library
如果想再让其隐藏,可以:
chflags hidden ~/Library

2.静态库工程的建立:Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个MtimeLibrary这样的工程。(里面的功能就不要关注了,简单 2个数相加)


3.工程建立以后,删除默认的.h .m 文件,然后自己创建CountNumbers..h CountNumbers..m文件。如下图:

4.OK,选择iPhone 5.1Simulator ,Command + B 编译,我们可以在Procts下面找到我们编译生成一个模拟器上可运行的libMtimeLibrary.a这个文件,然后选择真机(如下图)再编译一次,这样会生成一个可以真机运行的libMtimeLibrary.a库。



5. 在libMtimeLibrary.a 右键 Open in Finder,可以找到libMtimeLibrary.a所在路径、后面我们会新建一个项目来添加这个.a文件测试。

打开终端:输入以下命令(路径根据自己的来决定)
cd /Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/

这样就到了Procts目录下了,ls 以后可以看到:


再输入一个命令: cd Debug-iphonesimulator/

然后通过下面命令来查看libMtimeLibrary.a信息
命令:lipo -info libMtimeLibrary.a
显示:
cashmatoMacBook-Pro:Debug-iphonesimulator cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: i386
i386是mac上的架构。

然后再输入下面命令:
cd ../

cd Debug-iphoneos/

继续通过命令来查看 lipo -info libMtimeLibrary.a,
显示:
cashmatoMacBook-Pro:Debug-iphoneos cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: armv7
armv7是iOS上的jia'ge架构。

到这里我们也明白了,为什么一个在真机上可以使用,一个只能在模拟器上使用了吧!

最后我们要做的就是要让这个libMtimeLibrary.a文件同时有i386和armv7信息,这样就是一个通用的静态库文件了。

6. 新建一个MtimeLibraryDemo应用,然后把真机或者模拟器的libMtimeLibrary.a 和CountNumbers.h文件引入进来,如图:


添加CountNumbers.h文件到需要调用的类里面,然后就可以调用libMtimeLibrary.a里面的方法了。

//
// AppDelegate.m
// MtimeLibraryDemo
//
// Created by cash on 12-3-23.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "AppDelegate.h"
#import "CountNumbers.h"
@implementation AppDelegate

@synthesize window = _window;

- (void)dealloc
{
[_window release];
[super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.

CountNumbers *cn = [[CountNumbers alloc] init];
int count = [cn addTwoNumbers:10 :20];
NSLog(@"count:%d",count);

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}

7. OK,编译运行这个应用程序。 错误了。。这个就是这篇文档的关键了.



我们找到刚才生成真机和模拟器的libMtimeLibrary.a目录。
debug-iphoneos里面的是基于arm6 arm7编译出来的库文件。debug-iphonesimulator文件夹下面的是基于i386编译出来的文件。



10. 最后是关键步骤:

通过lipo -create 命令来合并2个静态库文件。(-output 后面的/Users/cash/Desktop/test/libMtimeLibrary.a 是合并后的路径和文件名字)

lipo -create "/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphonesimulator/libMtimeLibrary.a" "/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphoneos/libMtimeLibrary.a" -output "/Users/cash/Desktop/test/libMtimeLibrary.a"
成功!

最后通过命令 lipo -info libMtimeLibrary.a 可以知道这个文件已经有i386和armv7信息了。
cashmatoMacBook-Pro:test cash$ lipo -info libMtimeLibrary.a
Architectures in the fat file: libMtimeLibrary.a are: i386 armv7
cashmatoMacBook-Pro:test cash$

⑦ ios a静态库 能反编译吗

.a静态库不能进行反编译,反汇编的可能性也极低。
静态库:静态库仅在程序启动时被连接使用,程序运行时将不再需要该静态库。
与静态库相对的是动态库:程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。

⑧ iOS 编译报错怎么办

1.编译iPad真机时,选择了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:iPad.

若编译出现如下错误:

Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

则修改 GCC4.2CodeGeneral区域中的ComplieForThumb为非选中.

已经有了开发者证书及私钥后,可直接在越狱的手机上调试.

2. 编译链接时, "_OBJC_CLASS_$_xxx", referenced from:可能需要重新建立某个类的文件.

或者:选择项目名,在detail列表中的target列(显示为一个又圆圈),把这个文件的复选选中,或者再次选中.以把它加入到这个target里面来.

3.在sdk4.0及以上使用RegexKitLite报'captureCount' was not declared in this scope错误,是在非.m文件中使用了它的原因.

4.there is no sdk with the name or path.

从网上down的开源代码,结果运行的时候常出现这样的错,并且在deployment中没有iosdeploymenttarget选项.

尝试 Project/Edit Active Target/ 及 Set Active SDK菜单项,来回切换一下Active Configuration。

5. EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION错误,意味着这个app有内存管理的问题,一般是因为访问野指针对象造成的。

一个和内存相关的崩溃一般很难定位到源代码,因为这个恶魔可能很早就在程序中做了坏事了。假如一段有问题的代码混乱了内存结构,这样产生的蝴蝶效应可能会在之后很久才表现出来,并且总在不同的地方。所以,若有指针类型出现了不可能的变化,很可能就是因为内存结构被野指针调用混乱了。

修复一些警告后,可能就能预防一些内存错误。警告在左边靠近行号的黄色三角指出一个编译警告,你点击那个黄色的三角形,xcode可能会弹出一个“Fix-it”的建议。

EXC_BAD_ACCESS崩溃不像SIGABRT,将不会得到很明朗的错误消息。然而可以使用一个让人看到曙光的调试工具:Zombies!死亡对象工具。打开这个项目的scheme editor,选择Run 选项,然后选择Diagnosics标签。勾上Enable Zombie Objects选项。当这个zombie工具被启用之后,即使这个对象被释放了,这个对象的内存也不会被清理。所以,那块内存将会被标记为“长生不死的”。假如你试着之后又去使用这块内存,这个app能够意识到你的错误操作,并且app将会抛出“messagesent to daellocated instance”错误并且终止运行。

在工程中加入NSZombieEnabled 环境变量,并设为启用,则在 EXC_BAD_ACCESS 发生时,XCode 的 Console 会打印出问题描述中,设置方法:双击Executables 下的 可执行模组,在弹出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,并设定为 YES,点击选中复选框启用此变量。

可以再加入 MallocStackLogging 来启用malloc记录,以获得更多的提示来帮助定位问题。

在gdb窗口输入 (格式: shell malloc_history <id> <address>) shellmalloc_history1436 0x5f7fcf0, 也可以在终端中去运行 就要去掉以上的shell 指令 如 malloc_history <id> <address>

应该仅当需要调试内存时,才设置上述环境变量。

注意一点:不应该一直启用zombie objects。因为这个工具将永远不会释放内存,只是简单标记一下这个内存是不死的,你最终将会在某个时候耗尽所有的内存,因为所有分配过的内存都不会得到重用。因此应该在排查内存相关的错误的时候才开启zombie objects,其他时候应该关闭它。

在xcode4中,To edit environment variables, go to Menu Proct / Edit Scheme…, select the desired configuration (you probably want 'Run') from the left sidebar first and then click on the Arguments tab. Environment variables are configurable there.

6.运行一个IPhone程序时,弹出窗口说“程序运行失败,预置描述文件已过期” 。 解决办法是,在Xcode中, window-> Orgnazier -> 你的iphone ->删除带有红*的该程序之前的Profile 。 然后从Xcode运行该程序.

7.真机编译时报 Code Sign error: The identity doesn't match any valid certificate/private key pair in the default keychain

修改工程和Targets的get infouild 中的code signing identity为空

8.调试打印

CFShow(coreFoundationThingy) will print out a description of coreFoundationThingy to the console. Output looks something like: {value = w:1186.000000 h:687.000000 type = kAXValueCGSizeType}

If NSLog() is printing something out as an NSCFType, try CFShow().

9. 编译时报 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1,修改C/C++ Compiler Version为gcc4.2

10.this class is not key value coding-compliant for the key viewController

可能在创建了一个基于view的工程,而后把生成的viewcontroller删除了,但是在.xib中还有对它的引用,在IB中直接用delete键删除掉它就行了。

11.这台电脑上已经存在一个名为“embedded.mobileprovision”的预置文件,您是否要替换么?

http://blog.sina.com.cn/s/blog_6907b67f0100o2vw.html

12.真机调试时报failed to upload *.app

http://hi..com/%CB%E6%B7%E7_1989/blog/item/9649f49f805f05aec8eaf466.html

http://www.shouyanwang.org/thread-462-1-1.html

13.记的release时,先置delegate为nil。

一个节点不应该保留任何对不属于它的节点的引用。

14.模拟器

将xcode升级到4.3.1以后发现,ipad的模拟器,没有Home键了。Command+Shift+H就可以实现类似点击Home键的效果了。

    热点内容
    测温一体机怎么配置 发布:2024-04-28 03:11:56 浏览:591
    大生活迅雷下载ftp 发布:2024-04-28 03:11:09 浏览:510
    python如何生成随机数 发布:2024-04-28 02:21:59 浏览:168
    小雨游戏解说我的世界服务器 发布:2024-04-28 02:08:12 浏览:876
    安卓怎么删除账户 发布:2024-04-28 02:06:50 浏览:828
    内存解压缩 发布:2024-04-28 01:58:10 浏览:867
    三星存储卡防伪 发布:2024-04-28 01:50:59 浏览:276
    轻云服务器和云服务器的区别 发布:2024-04-28 01:50:32 浏览:552
    xcode如何编译c语言 发布:2024-04-28 01:48:53 浏览:181
    create存储过程 发布:2024-04-28 01:42:52 浏览:578