这个问题一直让我发疯,我无法解决如何修复它...
Undefined symbols for architecture armv7:
"_deflateEnd", referenced from:
-[ASIDataCompressor closeStream] in ASIDataCompressor.o
"_OBJC_CLASS_$_ASIDataDecompressor", referenced from:
objc-class-ref in ASIHTTPRequest.o
"_deflate", referenced from:
-[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
"_deflateInit2_", referenced from:
-[ASIDataCompressor setupStream] in ASIDataCompressor.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
我认为这与:
ld: symbol(s) not found for architecture armv7
Run Code Online (Sandbox Code Playgroud)
但我补充道:libz.1.2.3.dylib它没有帮助,任何人都有任何想法?
我正在构建一个静态库.构建设置的架构设置为: $(ARCHS_STANDARD)显示为Standard Architectures (armv7, armv7s, arm64)我构建lib选择iOS Device AND然后使用模拟器(例如iPhone Retina).
现在我有两个构建(一个在内部Debug-iphoneos,另一个在内部Debug-iphonesimulator,我lipo -create用来创建聚合的lib:
lipo -create path/to/first/lib /path/to/second/lib -o MyLib.a
Run Code Online (Sandbox Code Playgroud)
如果我在另一个项目中使用这个库来模拟任何具有64位架构的iOS设备,它会给出symbol(s) not found for architecture x86_64.是什么让我如此愤怒,以至于lib项目本身位于工作区内,另一个项目使用lib.我可以在64位iOS模拟器上模拟!(在所有模拟器和设备上).我究竟做错了什么?
笔记:
我知道这个问题已多次提出,但我的目标与我在网上搜索的内容略有不同.具体来说,我已经能够为iPhone构建一个静态库,但我能够构建的最终胖文件只包含arm和i386架构(我不确定arm指的是:是v6还是v7?).我无法专门为armv6和armv7编译,他们使用lipo合并两个架构.lipo工具抱怨armv6和armv7库中存在相同的架构(arm,而不是armv6或armv7).
有人可以解释如何构建armv6和armv7,他们使用lipo将这些库合并为一个胖文件?
编辑:我需要构建不使用Xcode,而是直接编译传统的unix库.
我一直在尝试构建一个静态库,然后在Xamarin中创建一个绑定项目.一切正常,直到iOS 7出现.我不得不抓住最新版本的本机库并尝试在XCode 5中构建它,但它一直给我带来各种各样的问题.我认为它可能与构建过程有关,或者可能与XCode 5中的某些更改设置有关(相对于4),但我不确定.
我正在使用这个脚本来构建一个基于这个问题的工作的通用二进制文件:
我注意到的一件事是,之前,在我的二进制版本的旧版iOS 6.1版本(内置在XCode 4中)中,我的二进制文件大约是24 Mb,现在使用XCode 5它已经膨胀到接近50 Mb!这让我觉得编译和链接步骤有问题.
有任何想法吗?有没有其他人在XCode 5(vs 4)中遇到通用二进制文件的问题?
每个C/C++库都有一些应该与该库一起使用的标头.如果你使用超过1-2个库,自定义标题路径是一个令人头疼的问题.
所以我想:有没有办法将C库编译为框架.静态库+标题+版本控制.
我在XCode模板中找到了Cocoa框架,但没有关于iPhone框架构建.这个简单的步骤可以允许开发人员使用一些有趣的代码在彼此的框架之间进行构建和共享.
使用libpng,libjpeg和其他打包为框架的库也会很棒.
我不会在这些框架中使用动态库.仅存在静态版本.
我正在尝试构建一个可以与ios3.x和ios4.x一起使用的静态库.我可以使用ios3.0构建一个静态库,它可以在ios3.0中与另一个项目一起使用,但不能在ios4中编译.从ios4到ios3也是如此.
以下是重新创建的方法:
在app delegate header的应用程序的didFinishLaunchingWithOptions方法中添加
TestViewController*test = [TestViewController alloc] init;
使用ios3.0模拟器进行编译
当我编译时,我得到:
Ld build/Debug-iphonesimulator/library4Test.app/library4Test normal i386
cd /Users/test/Documents/Testing/library4Test
setenv MACOSX_DEPLOYMENT_TARGET 10.5
setenv PATH "/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/GrandpaIPhone/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -L/Users/test/Documents/Testing/library4Test -F/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -filelist /Users/test/Documents/Testing/library4Test/build/library4Test.build/Debug-iphonesimulator/library4Test.build/Objects-normal/i386/library4Test.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -llibrary4_1 -o /Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator/library4Test.app/library4Test
Undefined symbols:
"_objc_msgSendSuper2", referenced from:
-TestViewController didReceiveMemoryWarning in liblibrary4_1.a(TestViewController.o)
-TestViewController viewDidUnload in liblibrary4_1.a(TestViewController.o)
-TestViewController dealloc in liblibrary4_1.a(TestViewController.o)
"__objc_empty_vtable", referenced …Run Code Online (Sandbox Code Playgroud) 如果你为iOS创建一个静态库,你是否必须用它来分发头文件,还是有另一种方法让它工作?
目前我有一个my_lib.a文件用于设备和模拟器但是当我将它拖到另一个测试应用程序中使用它时,它说它找不到标题,并且我在代码中使用它的所有地方都是未申报.所以我认为我要么做错了,要么我还要用它发送相应的头文件.
我的流程背景:
我已经看到了两个为设备和模拟器创建静态库的指南.本网站上的一个:使用Xcode和SDK 4+构建胖静态库(设备+模拟器)
这里有一个:http://mark.aufflick.com/blog/2010/11/19/making-a-fat-static-library-for-ios-device-and-simulator
我用第二个网站试试看.如果我做得对,我也有点好奇.我刚进入Release-iphone(os |模拟器)文件夹,在ios one中找到了.a,在模拟器中找到了.o.
我想在我的iPhone应用程序中包含一个unrar文件选项.
我已经尝试了https://github.com/ararog/Unrar4iOS但是这个库还没有完成(有些函数还没有实现像 - (BOOL)unrarFileTo:(NSString*)path overWrite:(BOOL)overwrite)
谢谢.
是否有任何教程描述如何创建库或是iPhone的框架?我有许多在应用程序之间共享的方法.这些将作为图书馆得到更好的维护.
我正在创建一个库,即使它通过打包我的所有代码并将所有头文件放在一个文件夹然后压缩文件夹和静态库中工作得很好,我只是无法弄清楚"复制"的目的标题"构建阶段下的部分".
我已阅读所有这些链接:
Stackoverflow:复制标题:public vs private vs project
但我仍然没有看到设置复制标题的重点,我意识到你可以在构建设置>打包下设置私有和公共路径,并且头文件将在构建后转到该文件夹.但这有什么意义呢?这有什么不同于不设置单个副本头文件,只需抓取.a文件抓取我的所有头文件并将它们放在一个文件夹中?设置复制项目标题的目的是什么?,因为它们根本不包含在目标中?
iphone ×7
ios ×5
xcode ×4
cocoa ×2
64-bit ×1
armv7 ×1
c ×1
cocoa-touch ×1
fat-binaries ×1
frameworks ×1
header-files ×1
ipad ×1
objective-c ×1
static ×1
unrar ×1
xamarin ×1
xcode4.2 ×1
xcode5 ×1