cordova 打包的项目里加入微信支付功能编译问题。

最近在做公司项目,需要在cordova 打包的项目里加入微信支付功能。而不是使用通过新建single application的项目里开发。

使用从微信开放平台下载来的开发包,按照普通的新建single application项目的方式加了在targets下的Link binary with libraries 里加上libsqlite3.0.dylib, libz.dylib ,  SystemConfiguration.framework        CoreGraphics.framework    Foundation.framework    UIKit.framework,还有对于 c++需要的 libc++.dylib。这种方法在普通新建single application项目里是完全通过的。可是就是在cordova 打包的项目在仍然还有14个错。。。。

报错如下:
Undefined symbols for architecture x86_64:
  "_SecItemAdd", referenced from:
      +[MTAWXOKeyChain save:data:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_SecItemCopyMatching", referenced from:
      +[MTAWXOKeyChain load:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_SecItemDelete", referenced from:
      +[MTAWXOKeyChain save:data:] in libWeChatSDK.a(MTAWXOKeyChain.o)
      +[MTAWXOKeyChain delete:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecAttrAccessible", referenced from:
      +[MTAWXOKeyChain getKeychainQuery:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecAttrAccessibleAfterFirstUnlock", referenced from:
      +[MTAWXOKeyChain getKeychainQuery:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecAttrAccount", referenced from:
      +[MTAWXOKeyChain getKeychainQuery:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecAttrService", referenced from:
      +[MTAWXOKeyChain getKeychainQuery:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecClass", referenced from:
      +[MTAWXOKeyChain getKeychainQuery:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecClassGenericPassword", referenced from:
      +[MTAWXOKeyChain getKeychainQuery:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecMatchLimit", referenced from:
      +[MTAWXOKeyChain load:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecMatchLimitOne", referenced from:
      +[MTAWXOKeyChain load:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecReturnData", referenced from:
      +[MTAWXOKeyChain load:] in libWeChatSDK.a(MTAWXOKeyChain.o)
  "_kSecValueData", referenced from:
      +[MTAWXOKeyChain save:data:] in libWeChatSDK.a(MTAWXOKeyChain.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这里普及下编译链接出错:

每次遇到这种错误就头痛,害死N多脑细胞了,就在这里做个总结吧

可能会遇到这几种错误:
Undefined symbols for architecture armv7
Undefined symbols for architecture armv7s
Undefined symbols for architecture arm64
Undefined symbols for architecture i386
Undefined symbols for architecture x86_64

错误原因分析
1、大部分情况下是忘记添加了某个系统framework或dylib吧,比如你在项目中使用了sqlite3,但是没有添加libsqlite3.dylib,就会出现这个问题。解决办法是增加对应的framework或dylib。
2、如果是在C++里调用C函数,检查是否有添加extern "C",这可以通过观察错误提示中的函数名形式来决定,如果是C函数而以C++的方式调用就需要添加extern "C"。
3、
如果是把其它工程的xcodeproj文件加入到当前项目中,检查Build Phases中的Target
Dependencies有没有添加依赖,以及General中的Linked Frameworks and
Libraries有没有添加相关的.a文件。
4、如果添加.a文件编译无错而添加xcodeproj文件编译出错可参考3
5、如果添
加.a文件编译出错,首先检查其对应的头文件是否添加正确,或者在Build Setting中有没有添加对应的Header Search
Path路径;其次检查.a文件的c++编译选项与当前项目的c++编译选项是否一致;最后检查.a文件与当前项目的CPU架构信息是否一致
6、如果是extern变量报这个错误,要检查extern变量有没有在其它地方声明,如果没有则加上;如果外部变量在静态库中,可根据5检查引用头文件或头文件搜索路径是否正确;如果头文件无问题,就需要检查静态库与与当前项目的CPU架构信息是否一致
7、
如果是使用了静态库,真机Debug测试时正常,而在执行for iOS
Device测试时报这个错误,很可能是因为静态库支持的架构不全。出现这种情况是Build Setting中的Build Active
Architecture Only在Debug下设为Yes,从而使得真机Debug测试正常。

检查静态库的CPU架构支持命令:
lipo -info xxxxx.a

找出不支持arm64的静态库
find . -name *.a -exec lipo -info "{}" \;

在@end处提示expected }错误解决

题很明显是}匹配出现问题了。如果代码少很好找,如果代码很多怎么缩小查找范围呢?一般出现这个问题时伴随另一个错误:在某个函数定义处提示"Use
of undeclared identifire
‘someMethod‘”,那么就是在此函数定义之前的地方少了一个},导致编译器误把函数定义当成函数调用了。

查看微信提供的开发包,以上各方面对应可能出错地方都排查,包也确实支持64位的。捉摸了一天,把网上所有资料基本翻了个遍,无果。。。。。。

最后,在无望的情况下各种乱试,看到这个:http://stackoverflow.com/questions/11013997/strange-errors-in-apples-reachability-files

在里面看到如下有人写到这么一条:

Add these frameworks: SystemConfiguration.framework   Security.framework      CFNetwork.framework

然后我抱着试一试,也没啥指望的情况下,弄了下,结果,神奇的编译过来。。。

总结 :在 cordova项目里还需要额外添加Security.framework这个库!

时间: 2024-08-29 07:38:50

cordova 打包的项目里加入微信支付功能编译问题。的相关文章

spring boot项目之微信支付功能实现详细介绍

对接微信支付功能主要有以下几个步骤, 而其第一个关键点就是获取OpenID,在这里介绍两种获取方式: 一.微信授权 微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修改授权回调域名.请注意,这里填写的是域名(是一个字符串),

[5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)

1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按钮时,执行一个Ajax到后台 后台通过前台的部分信息(如商品名额,金额等),将其组装成符合微信要求格式的xml,然后调用微信的"统一下单接口" 调用成功后微信会返回一个组装好的xml,我们提取之中的消息(预支付id也在其中)以JSON形式返回给前台 前台将该JSON传参给微信内置JS的方法

ecshop增加pc扫描二维码微信支付功能代码

ecshop开发网站,如果没有手机版,又想通过微信支付,可以加入pc二维码扫描微信支付功能 工具/原料 ecshop商城系统,phpqrcode,WxPayPubHelper 公众号已申请微信支付 方法/步骤 使用PHP QR Code生成二维码,下载,在商品支付页面加入 include 'phpqrcode/phpqrcode.php'; $pay_url ='http://www.xxx.com/weixin/weixin.php?order_id='.$order['order_sn'];

如何玩转微信支付功能的原理和开发(转)

打开微信,各种营销信息霸占了我的眼球,以“微信支付+微信小店”的模式挑战阿里“支付宝+淘宝天猫”的模式开启了新纪元,腾讯此举是在革淘宝的命吗?有人说,微信对阿里最大的挑战,是把连接能力下发给了企业/用户,让企业/用户而不是平台自身发挥主动权和能动性来建立新的连接模式. 近年来,移动支付发展迅猛,移动支付已经成为了不可抵挡的发展趋势,其引领了新一轮的支付潮流.从某种角度来讲,反观移动互联网的迅速发展,对微信的快速发展起到了很大的推动力,其所蕴含的巨大潜力使其成为了市场争相抢夺的香饽饽.一时间各种支

微信开发——申请微信支付功能及支付环境设置

很久没写博客文章了,最近一直负责微信开发实现微信支付功能,所以在这方面有一定的了解. 在开始实现微信支付功能的前提是公众号已认证的并已通过审核的服务号,具体微信支付申请人的流程没有比官 方公布的流程更详细的了,附上链接https://mp.weixin.qq.com/paymch/readtemplate?t=mp/business/faq_tmpl,开通 并与微信工作人员沟通微信支付相关授权路径之后,在微信后台可以看到微信支付的相关功能 在支付申请选择下可以查看商户的基本资料以及我们开发支付功

【转】微信小程序实现微信支付功能(可用)

原博: https://blog.csdn.net/fredrik/article/details/79697963 微信小程序实现微信支付功能 直接把里面的参数替换成你的就可以了,前提是你要开通的有微信支付功能,需要商户号,appid,appsecret,openid, //小程序端代码: pay:function(){ var that=this wx.getStorage({ key: 'openid', success: function(res) { wx.request({ //这里

微信小程序 使用微信支付功能实现在线支付订单

以前做过PC页面微信支付,但是这次在小程序 直接调用微信支付功能还是方便很多 先放个微信官方API链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 先说说整个下单支付流程的整体思路, 0,准备工作: 一,appId,开发帐号中注册时的appId. 二,sdkContent,后台返回的包含有金额,支付方式等信息的数据包. 三,key值,商户申请微信支付功能时所配置的密钥 准备好后, 1,首先选

网站添加微信支付功能(小白填坑)

本周的工作安排就是在网站添加支付功能,包括支付宝.微信.财付通等,今天这篇文章先说一下微信支付吧,支付宝的太容易了基本看一下都会了 1.首先准备工作,开通了支付功能的账号,具体怎么开通的我也不熟悉因为我做的时候都是使用开通好的账号(目前微信支付好像只支持商家不支持个人吧?) 2.按照我的性格当然是百度一下啦,但是微信支付的文档说明事例实在是太坑了,完全不是我这种小白可以一下看懂的,在这夸奖一下支付宝,支付宝的事例文档做的太好了基本做的时候没什么坑 准备工作结束开工: 我的开发环境是java,所以

h5调用微信支付功能

支付按钮的点击事件 $(′.Save_Patient_Msg′).click(function(){ $(′.Save_Patient_Msg′).off(′click′); var hrdfId = getOrderId(); var txnAmt = $(′.sum_pay.font-red′).html(); var data = {orderId: hrdfId, txnAmt: "0.01", prodDesc: "远程诊断服务", callType: &