怎么修改第三方静态库支持的架构?没有源码
我想把已写好的项目文件放到cocoapods上供他人使用,我的项目文件包含一个由第三方开发的静态库,libEZOpenSDK.a,这个静态库只支持真机架构,不支持模拟器架构,所以在进行pod lib lint 进行本地验证的时候会出现错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_EZDeviceInfo", referenced from:objc-class-ref in Camera_TZYOPHomePageViewController.o "_OBJC_CLASS_$_EZOpenSDK", referenced from: objc-class-ref in Camera_TZYHistoryRecordViewController.o objc-class-ref in Camera_TZYOPFunctionsSDK.o objc-class-ref in Camera_TZYOPHomePageViewController.o objc-class-ref in Camera_TZYSettingViewController.o ld: symbol(s) not found for architecture i386 clang: error: linker command
failed with exit code 1 (use -v to see invocation)
BUILD FAILED
The following build commands failed:
Ld /Users/yuancong/Library/Developer/Xcode/DerivedData/App-fmvnjejbnyymigeawgsdeaxjbfki/Build/Intermediates/Pods.build/Release-iphonesimulator/Cameara_TZYEZFunctions.build/Objects-normal/x86_64/Cameara_TZYEZFunctions
normal x86_64
Ld /Users/yuancong/Library/Developer/Xcode/DerivedData/App-fmvnjejbnyymigeawgsdeaxjbfki/Build/Intermediates/Pods.build/Release-iphonesimulator/Cameara_TZYEZFunctions.build/Objects-normal/i386/Cameara_TZYEZFunctions
normal i386 (2 failures)
所以我想问,有什么办法可以通过这个验证吗?比如,我是否需要在对应的podspec文件里面设置什么?或者有什么办法可以修改这个静态库支持的架构?
注意:我没有这个静态库的源码
最好是有什么方法可以修改静态库支持的架构,求大神解答,谢谢。
通过lipo -info 查看的静态库的信息:
yuancongdeiMac:~ yuancong$ lipo -info
/Users/yuancong/Desktop/iOS_v4.4.0.build20170320/SDK/libEZOpenSDK.a
Architectures in the fat file:
/Users/yuancong/Desktop/iOS_v4.4.0.build20170320/SDK/libEZOpenSDK.a
are: armv7 arm64 yuancongdeiMac:~ yuancong$
下面是我的podspec文件里的配置:
Pod::Spec.new do |s| s.name = 'Cameara_TZYEZFunctions'
s.version = '0.1.0' s.summary =
'Cameara_TZYEZFunctions.'s.description = <<-DESC
Cameara_TZYEZFunctions podspec. DESC
s.homepage =
'https://github.com/tencheer20...'s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'tencheer2017' => 'stevenzhu@tencheer.com.cn' }
s.source = { :git =>
'https://github.com/tencheer20...', :tag =>
s.version.to_s }s.ios.deployment_target = '8.0'
s.source_files =
'Cameara_TZYEZFunctions/Classes/*/','Cameara_TZYEZFunctions/sdk/openssl/include/openssl/.h','Cameara_TZYEZFunctions/sdk/SDK/include/TestLib/.h's.resources =
['Cameara_TZYEZFunctions/Camera_TZYResources/images//.png','Cameara_TZYEZFunctions/Camera_TZYResources/xib/.xib','Cameara_TZYEZFunctions/Camera_TZYResources/storyboard/.storyboard','Cameara_TZYEZFunctions/Camera_TZYResources/other//.strings']s.public_header_files =
'Cameara_TZYEZFunctions/Classes/*/.h','Cameara_TZYEZFunctions/sdk/openssl/include/openssl/.h','Cameara_TZYEZFunctions/sdk/SDK/include/TestLib/.h'
s.frameworks = 'CoreMedia',
'AudioToolbox','VideoToolbox','GLKit','OpenAL','MobileCoreServices','SystemConfiguration','CoreTelephony','AVFoundation'
s.libraries = 'stdc++.6.0.9', 'c++','iconv.2.4.0'
s.vendored_libraries =
'Cameara_TZYEZFunctions/sdk/SDK/libEZOpenSDK.a','Cameara_TZYEZFunctions/sdk/openssl/lib/libssl.a','Cameara_TZYEZFunctions/sdk/openssl/lib/libcrypto.a'
s.dependency 'AFNetworking' s.dependency 'Toast' s.dependency
'ZASwitch' end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我前几天集成支付宝SDK的帮助类的时候,遇到了集成 .a 文件的问题,不知道是不是楼主遇到的情况。写下我遇到的情况,希望能帮到你。
支付宝SDK官方没有iOS的github repo ,因此只能手动导入到工程里,还要解决各种依赖库。然后我就想要把它集成到 github 里。
然后主要有2个难点:
如何集成 SDK 里的 AlipaySDK.framework 到 CocoaPods 里
如何集成 .a 和 依赖它的 .h 文件到 CocoaPods 里。这里我也没拿到 .m 源码,只有 .a 和 .h 文件。
然后,google 和 stackoverflow ,再有就是 CocoaPods 里的 issue,最终把上面的问题解决了。先放一个我集成好的 AlipaySDK 帮助类 repo,链接在这.
针对问题1:
找了各种方法,最后发现无法集成到一个 repo 里。所以单独将 AlipaySDK.framework 和 AlipaySDK.bundle 抽取出来,放到一个 repo 里。这样,其他库想用的话,直接依赖这个 repo 就好了。
针对问题2:
首先,将 .a 和 .h 放到 subspec 里进行管理,然后主要用
vendored_libraries
索引.a文件,用libraries
标定这个子模块作为库使用。其次,需要修改 Example 里 Podfile 的内容,在最后添加:
解决
target has transitive dependencies that include static binaries
的问题最后,在验证的时候要加上 pod lib lint --use_libraries 修饰,告诉 pods 这里用到了静态库。
至此,上面的问题被解决掉。
只回答第一个问题吧。。。你没有源码的话,你引用的第三方库是没办法修改成支持模拟器的,源码编译的时候,需要针对不同的architecture单独编译不同的库,最终合成一个.a文件,并不是修改某个值就可以的,具体的你可以搜一下“Mach-O File Format”这个官方文档,有具体的.a文件格式介绍
在podspec文件中添加支持的架构:
在这里选择你支持的架构