适用于iPhone的admob sdk使用专有的libAdMobNoThumb.a
库和基于Objective-C源的TouchJSON库。
有人知道TouchJSON的C#绑定,以便我们可以包含它吗?
或者有人知道如何构建可以包含的库吗?
我们使用Xcode创建了一个iPhone库项目,并添加了完整的TouchJSON源代码树。我们在测试iPhone应用中将结果libTouchJSON.a
与以下gcc_flags链接:
-v -v -v -gcc_flags "-L${ProjectDir}/Lib -lAdMobNoThumb -lTouchJSON -force_load ${ProjectDir}/Lib/libAdMobNoThumb.a -force_load ${ProjectDir}/Lib/libTouchJSON.a"
这产生了以下错误输出(感谢-v -v -v):
Error 1: mtouch failed with the following message:
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m: In function 'monotouch_debug_connect':
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1779: warning: implicit declaration of function 'select'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m: In function 'main':
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1821: warning: implicit declaration of function 'chdir'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1838: warning: implicit declaration of function 'monotouch_enable_debug_tracking'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1914: warning: implicit declaration of function 'dup2'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1921: warning: implicit declaration of function 'mini_get_debug_options'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1925: warning: implicit declaration of function 'mono_debugger_agent_parse_options'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:2052: warning: implicit declaration of function 'getpagesize'
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:2055: warning: cast from pointer to integer of different size
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:2055: warning: initialization makes pointer from integer without a cast
Undefined symbols:
"_OBJC_CLASS_$_CJSONSerializer", referenced from:
objc-class-ref-to-CJSONSerializer in libAdMobNoThumb.a(AdMobAd.o)
objc-class-ref-to-CJSONSerializer in libAdMobNoThumb.a(AdMobWebView.o)
objc-class-ref-to-CJSONSerializer in libAdMobNoThumb.a(AdMobFlexWebView.o)
"_OBJC_CLASS_$_CJSONDeserializer", referenced from:
objc-class-ref-to-CJSONDeserializer in libAdMobNoThumb.a(AdMobOpener.o)
objc-class-ref-to-CJSONDeserializer in libAdMobNoThumb.a(AdMobSearchViewController.o)
objc-class-ref-to-CJSONDeserializer in libAdMobNoThumb.a(AdMobAd.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
(1) (AdMobber)
有什么建议可以解决这个问题?
TIA,Mollyke。
答案 0 :(得分:4)
您的AdMob库无法找到CJSONDeserializer或CJSONSerializer类,我认为这些类来自libTouchJSON.a。通常这意味着您的libTouchJSON.a未包含在您的项目中。您应该仔细检查所有额外的参数,并确保您的libTouchJSON不是拇指,并包括您尝试链接的所有体系结构(x86代表模拟器,armv6代表设备)
答案 1 :(得分:0)
埃里克,
很抱歉延迟,但最近我一直忙于纯xcode项目。让我告诉你我是如何创建一个TouchJSON库的。
我用xcode创建了一个库项目,并复制了最新的admob库附带的TouchJSON源代码。我构建了两个nothumb发行版本,一个用于模拟器,一个用于设备。这产生了两个库。为了便于在MT项目中使用这些,我使用lipo工具将它们组合成一个胖库。胖库很方便,因为它们可以在模拟器和设备构建中使用。完整的项目,包括胖库libTouchJSON.a和用于构建胖女士的脚本,存在于http://www.filedropper.com/touchjson的zip文件中。
(注意:这是作为我最初问题的答案而发布的,因为它被Eric S作为对该问题的评论而被接受的时间有点太长了)
答案 2 :(得分:0)
由于很多人会发现这个问题,你可以在github上发布的adob上使用最新的monotouch绑定https://github.com/dalexsoto/AlexTouch.GoogleAdMobAds
以下是如何使用它以及如何使用其事件
的示例public override void ViewDidLoad ()
{
base.ViewDidLoad ();
var ad = new GADBannerView(new RectangleF(new PointF(0,0), GADBannerView.GAD_SIZE_300x250))
{
AdUnitID = "Use Your AdMob Id here",
RootViewController = this
};
ad.DidReceiveAd += delegate
{
this.View.AddSubview(ad);
Console.WriteLine("AD Received");
};
ad.DidFailToReceiveAdWithError += delegate(object sender, GADBannerViewDidFailWithErrorEventArgs e) {
Console.WriteLine(e.Error);
};
ad.WillPresentScreen += delegate {
Console.WriteLine("showing new screen");
};
ad.WillLeaveApplication += delegate {
Console.WriteLine("I will leave application");
};
ad.WillDismissScreen += delegate {
Console.WriteLine("Dismissing opened screen");
};
Console.Write("Requesting Ad");
ad.LoadRequest(new GADRequest());
}