Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS Admob Network Mediation: Duplicate Symbols Error With all_load and ObjC

I know this question has been asked before, but I've tried everything I could find and none of it has worked.

I have a fully functional iOS app, that I now want to integrate AdMob Network Mediation with. I've already successfully had just AdMob working fine, but the Mediator requires the linkers '-all_load' and '-ObjC' to be set (in Other Linker Flags). Sure enough if I build without them, no ads are shown and in the logs it says it requires them to be set.

The problem is I cannot successfully build my app with either all_load or ObjC set. I read that ObjC isn't necessary for iOS apps, but even without it I still have the problem with all_load. The problem being I get this error:

ld: duplicate symbol [some command here] [some static library] and [path to same command] for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

If I remove the offending static library and rebuild, the error simply moves on to the next static library I have and so on. Being that I'm trying to install an ad mediator, my app requires several static libraries from different ad networks to be in place.

Here are some solutions that I've tried that have failed:

  • compiling for armv6, not armv7 (not an ideal fix anyway, as I want both)
  • replacing all_load with force_load [path to library], and testing on an actual iOS device as apparently this method own't work with a simulator regardless (this doesn't seem to do anything, I get the exact same problem, using the same path found in the error anyway)
  • removing all_load (builds but like I said, AdMob Mediation requires it)
  • removing offending libraries (obviously doesn't work because the error complains about every single one of my static libraries which I need)

Any help is appreciated in solving this issue.

EDIT: THE SOLUTION TO MY PROBLEM

As it turns out, the only thing I didn't try was only using -ObjC on an actual device, this seems to work for me!

EDIT2: NEVERMIND, STILL HAVING TROUBLE

I'll quote my comment below when asked what static libraries were causing me problems:

"Well I got AdMob Mediation working without any other networks by excluding the all_load and just including ObjC, which was working fine until I added my first network, Adfonic, which is currently conflicting with MobileAppTracking, I get: ld: duplicate symbol _OBJC_IVAR_$_Reachability.reachabilityRef in [path]/Adfonic SDK/libAdfonic.a(Reachability.o) and [path]/Objects-normal/armv6/Reachability.o for architecture armv6 clang: error: linker command failed with exit code 1 (use -v to see invocation)"

I had the bare bones of Admob Mediator working by deleting all other ad network libraries, but with my first third-party network integration I'm getting another conflict between that and a tracking library I have implemented, MobileAppTracking. Still looking for a solution to solve 'duplicate symbols'.

EDIT 3

I can confirm that every single ad network I try with the AdMob Mediator (except for AdMob itself) fails to compile, most of them due to duplicate symbol errors. I don't understand how this can be, as I'm sure I'm not the only one using Admob's Mediation service.

EDIT 4

I'll quote my comment below:

"I actually managed to get most of the ad networks and libraries working for me, I had to delete quite a few references under Compile Sources, but I got it compiling none-the-less, wile still using -ObjC and -all_load!"

like image 292
Paul Avatar asked Apr 27 '12 00:04

Paul


2 Answers

you can use -force_load "path/to/your/libGoogleAdMobAds.a" instead of -all_load, this will load your libGoogleAdMobAds only

like image 184
Zennichimaro Avatar answered Nov 20 '22 11:11

Zennichimaro


Please remove add-one folder in your SKD folder

like image 2
user1304842 Avatar answered Nov 20 '22 11:11

user1304842