missing required architecture i386 in file

问题描述:今天研究QCAR的iPhone版本,下载Demo后编译报错,如下:

ld: warning: ignoring file ../../build/lib/arm/libQCAR.a, missing required architecture i386 in file

Undefined symbols for architecture i386:

"QCAR::deinit()", referenced from:

-[EAGLView onDestroy] in EAGLView.o

"QCAR::onResume()", referenced from:

-[EAGLView onResume] in EAGLView.o

-[EAGLView updateApplicationStatus:] in EAGLView.o

"QCAR::onPause()", referenced from:

-[EAGLView onPause] in EAGLView.o

"QCAR::setHint(unsigned int, int)", referenced from:

-[EAGLView updateApplicationStatus:] in EAGLView.o

"QCAR::onSurfaceCreated()", referenced from:

-[EAGLView initApplication] in EAGLView.o

"QCAR::onSurfaceChanged(int, int)", referenced from:

-[EAGLView initApplication] in EAGLView.o

"QCAR::setInitParameters(int)", referenced from:

-[EAGLView initQCAR] in EAGLView.o

"QCAR::init()", referenced from:

-[EAGLView initQCAR] in EAGLView.o

"QCAR::Tracker::getInstance()", referenced from:

-[EAGLView loadTracker] in EAGLView.o

-[EAGLView startCamera] in EAGLView.o

-[EAGLView stopCamera] in EAGLView.o

"QCAR::CameraDevice::getInstance()", referenced from:

-[EAGLView startCamera] in EAGLView.o

-[EAGLView stopCamera] in EAGLView.o

-[EAGLView configureVideoBackground] in EAGLView.o

-[OverlayView actionSheet:clickedButtonAtIndex:] in OverlayView.o

"QCAR::Tool::getProjectionGL(QCAR::CameraCalibration const&, float, float)", referenced from:

-[EAGLView startCamera] in EAGLView.o

"QCAR::Renderer::getInstance()", referenced from:

-[EAGLView configureVideoBackground] in EAGLView.o

-[EAGLView renderFrameQCAR] in EAGLView.o

"QCAR::requiresAlpha()", referenced from:

-[EAGLView initRendering] in EAGLView.o

"QCAR::State::~State()", referenced from:

-[EAGLView renderFrameQCAR] in EAGLView.o

"QCAR::State::getNumActiveTrackables() const", referenced from:

-[EAGLView renderFrameQCAR] in EAGLView.o

"QCAR::State::getActiveTrackable(int) const", referenced from:

-[EAGLView renderFrameQCAR] in EAGLView.o

"QCAR::Tool::convertPose2GLMatrix(QCAR::Matrix34F const&)", referenced from:

-[EAGLView renderFrameQCAR] in EAGLView.o

ld: symbol(s) not found for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)

问题分析:开始以为是没有找到库,重新引用库,无效。后查Google,要删除掉Targets-Build Settings-Library Search Paths,照做,无效。最后找到以下这段:

It seems the library is built for phone deployment (ARM) but you are trying to link it to a simulator executable (x86). This won't work. Rebuild the library for the simulator.

问题解决:切换成Device编译,搞定。

升级后iOS后上传审核Architectures问题

问题描述:今天Geely的iPhone版本要上架,用Application Loader上传报错,如下:

iPhone/iPod Touch: application executable is missing a required architecture. At least one of the following architecture(s) must be present: armv6

问题分析:显然问题出在升级iOS5后的配置问题上。

问题解决:在Target的Build Settings里,找到Architectures,点击"Standard(armv7)",再点"Other...",把原来的内容删掉,在分两行输入"armv6"和"armv7",搞定。

iOS5结构体编译严格

问题描述:今天二罗升级iOS SDK5,发现Monster不能编译了。具体报错信息如下:

variable length array of non-POD element type 'b2Vec2'

问题分析:错误指向的是cocos2d里一个结构体数组定义,如下:

b2Vec2 vertices[vertexCount];

问题解决:把其改成指针形式,如下:

b2Vec2 *vertices = new b2Vec2[vertexCount];

搞定了。

iOS SDK5升级类库问题

问题描述:今天小新升级iOS SDK5,发现Stupid不能编译了。具体报错信息如下:

Ld /Users/terrence/Library/Developer/Xcode/DerivedData/FSStupid-btpugnuitaisoebkwchzpplpvjuq/Build/Products/Debug-iphonesimulator/FSStupid.app/FSStupid normal i386
    cd "/Users/terrence/Desktop/FSStupid 10.14 2"
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/terrence/Library/Developer/Xcode/DerivedData/FSStupid-btpugnuitaisoebkwchzpplpvjuq/Build/Products/Debug-iphonesimulator "-L/Users/terrence/Desktop/FSStupid 10.14 2/FSStupid/WeiboEngine" "-L/Users/terrence/Desktop/FSStupid 10.14 2/FSStupid/WeiboEngine/Libraries & Headers" "-L/Users/terrence/Desktop/FSStupid 10.14 2/FSStupid/WeiboEngine/WeiboEngine" -F/Users/terrence/Library/Developer/Xcode/DerivedData/FSStupid-btpugnuitaisoebkwchzpplpvjuq/Build/Products/Debug-iphonesimulator -filelist /Users/terrence/Library/Developer/Xcode/DerivedData/FSStupid-btpugnuitaisoebkwchzpplpvjuq/Build/Intermediates/FSStupid.build/Debug-iphonesimulator/FSStupid.build/Objects-normal/i386/FSStupid.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED=30100 -framework CoreAudio -framework AudioToolbox -framework StoreKit -lz.1.2.3 -framework MessageUI -lsqlite3 -licucore -framework SystemConfiguration -framework MobileCoreServices -framework Security -framework CFNetwork -framework MediaPlayer -framework AVFoundation -framework UIKit -framework Foundation -framework CoreGraphics -lOAuth -o /Users/terrence/Library/Developer/Xcode/DerivedData/FSStupid-btpugnuitaisoebkwchzpplpvjuq/Build/Products/Debug-iphonesimulator/FSStupid.app/FSStupid

ld: library not found for -lz.1.2.3
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

问题分析:看来是找不到类库的问题,lz.1.2.3对应的是libz.1.2.3.dylib。而/Developer/Platforms/iPhoneOS.platform/DeviceSupport/Latest/Symbols/usr/lib目录下只有libz.1.2.5.dylib。

问题解决:在project设置里重新引到新版本的类库,一切ok了。