Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linker error calling C-Function from Objective-C++

I've got a weird linker issue. I have code that looks like so:

    double given_amount = self.modelController.levelCompleteRewardAmount;     swrve_currency_given(swrve, (CFStringRef)@"currencyName", given_amount); 

I have this code in two separate places: In an objective-c and an objective-c++ file. It compiles fine in objective-C land, but the swrve_currency_given() function causes the following in my WGController.mm file:

Undefined symbols for architecture armv7:   "swrve_currency_given(Swrve*, __CFString const*, double)", referenced from:       -[WGController giveTheUserSomeCashForPlayingThisLevel] in WGController.o ld: symbol(s) not found for architecture armv7 collect2: ld returned 1 exit status 

I'm not entirely sure if this error is related to the Obj-C vs. C++ thing, but it feels like it. My theory is that it perhaps thinks that it is a function on the Obj-C class? The 'swrve' code is 3rd party code, one .h and .c file and I'm importing like so:

#import "swrve.h"

Any help is appreciated! Thanks

like image 374
Chris Hill Avatar asked Feb 17 '12 20:02

Chris Hill


1 Answers

You may need to surround the function prototype with:

#if defined __cplusplus extern "C" { #endif  void swrve_currency_given (...whatever goes here...);  #if defined __cplusplus }; #endif 

That tells the compiler that it's a C function and not a C++ function.

like image 91
user1118321 Avatar answered Sep 25 '22 16:09

user1118321