I have the following files.
foo.h (C++ header file)
foo.mm (C++ file)
test_viewcontroller.h (objective c header file)
test_viewcontroller.m (Objective c file)
I have declared a method donothing() in foo.h and defined it in foo.mm.Lets say it is
double donothing(double a) { return a; }
Now,I try to call this function in test_viewcontroller.m
double var = donothing(somevar);
I get linker error which says "cannot find symbols" _donothing() in test_viewcontroller.o
collect2: ld returned 1 exit status
Can anyone please point me as to what is wrong?
Let me be precise :
#ifdef __cplusplus
extern "C"
{
char UTMLetterDesignator(double Lat);
NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting);
double test(double a);
}
#endif
@Carl
I have included my code sample.Are saying that I need to wrap only the test() method in ifdef.I dont understand what difference it can make.Can you please explain?
test_viewcontroller.m
is looking for a non-C++-mangled symbol name for donothing()
. Change its extension to .mm
and you should be good. Alternately, put an extern "C"
declaration on your method declaration in foo.h
when compiling the C++ file.
You want to have it look like this:
foo.h:
#ifdef __cplusplus
extern "C" {
#endif
double donothing(double a);
#ifdef __cplusplus
}
#endif
foo.mm:
#include "foo.h"
double donothing(double a)
{
return a;
}
test_viewcontroller.m:
#import "foo.h"
- (double)myObjectiveCMethod:(double)x
{
return donothing(x);
}