rubdottocom
rubdottocom

Reputation: 8298

How to Include Chipmunk libraries to iPhone Xcode project?

[SOLVED]

I copy the chipmunk folder structure from cocos2d+chipmunk template and build OK.

Thanks to Beta for trying to help.

:::::

I download chipmunk 5.3.1 and try with a simple example but I receive this compiled errors:

Undefined symbols:
  "_cpSpaceStep", referenced from:
      -[ChipmunkTestViewController delta:] in ChipmunkTestViewController.o
  "_cpBodyNew", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceAddShape", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceAddBody", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceHashEach", referenced from:
      -[ChipmunkTestViewController delta:] in ChipmunkTestViewController.o
  "_cpInitChipmunk", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpCircleShapeNew", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceNew", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

I'm not sure about adding Chipmunk libraries correctly, what sources from chipmunk .tgz I have to include?

Here's the code:

ChipmunkTestViewController.h

#import <UIKit/UIKit.h>
#import "chipmunk.h"


@interface ChipmunkTestViewController : UIViewController {
    UIImageView *barra;
    UIImageView *esfera;

    cpSpace *space;
}

- (void) configurarChipmunk;
- (void) delta:(NSTimer *)timer;
void updateShape(void *ptr, void *unused);

@end

ChipmunkTestViewController.m

#import "ChipmunkTestViewController.h"

@implementation ChipmunkTestViewController


- (void) configurarChipmunk {
    cpInitChipmunk(); // Init Chipmunk engine

    space = cpSpaceNew(); // Create new Space
    space->gravity = cpv(0, -100); // Direcction and magnitude of gravity in Space

    [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(delta:) userInfo:nil repeats:YES];    // NSTimer for animations

    // Create esfera Body
    cpBody *esferaBody = cpBodyNew(50.0f, INFINITY); 
    esferaBody->p = cpv(160,250);
    // Create esfera Shape
    cpShape *esferaShape = cpCircleShapeNew(esferaBody, 15.0f, cpvzero);
    esferaShape->e = 0.5f; // Elasticity
    esferaShape->u = 0.8f; // Friction
    esferaShape->data = esfera; // UIImageView association
    esferaShape->collision_type = 1;

    cpSpaceAddBody(space, esferaBody);
    cpSpaceAddShape(space, esferaShape);

}

- (void) delta:(NSTimer *)timer {
    cpSpaceStep(space, 1.0f/60.0f);     // Refresh Space info
    cpSpaceHashEach(space->activeShapes, &updateShape, nil);     // Refresh Shapes info
}

void updateShape(void *ptr, void *unused) {
    cpShape *shape = (cpShape*)ptr;
    if (shape == nil || shape->body == nil || shape->data == nil) {
        NSLog(@"Invalid Shape...");
        return;
    }
    // Refresh Shape position
    if ([(UIView*)shape->data isKindOfClass:[UIView class]]) {
        [(UIView*)shape->data setCenter:CGPointMake(shape->body->p.x, 480 - shape->body->p.y)];
    } else {
        NSLog(@"Shape updated outside updateShape function...");
    }

}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    barra = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"barra.png"]];
    barra.center = CGPointMake(160, 350);
    esfera = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"esfera.png"]];
    esfera.center = CGPointMake(160, 230);

    [self.view addSubview:barra];
    [self.view addSubview:esfera];

    [self.view setBackgroundColor:[UIColor whiteColor]];

    [self configurarChipmunk];
}

...

@end

Upvotes: 1

Views: 2850

Answers (4)

Nika Kasradze
Nika Kasradze

Reputation: 3019

If you use CocoaPods:

  1. in xCode click on your Pods project
  2. select chipmunk-physics target
  3. in Search Paths set Always Search User Paths to YES
  4. in Header Search Paths set

"${PODS_ROOT}/Headers/Private/chipmunk-physics" to Recursive and

"${PODS_ROOT}/Headers/Public/chipmunk-physics" to Recursive

xcode screenshot

hope it helps someone

Upvotes: 0

Sophy Swicz
Sophy Swicz

Reputation: 1357

I had the same question this days and I did this:

1.- Go to project --> add to project and find cocos2d-iphone-0.99.5 file, then from within that directory I've added the External directory (containing the chipmunk files). Be sure to have a checkmark in the box next to Copy items into destination group's folder (if needed), and then click the Add button.

2.- I follow this tutorial: http://monoclestudios.com/cocos2d_whitepaper.html (in the middle of the page is all the information need to add chipmunk)

3.- Change the #include "constraints/util.h" declaration to: "#include util.h"

I think is done.

Upvotes: 0

rubdottocom
rubdottocom

Reputation: 8298

I copy the chipmunk folder structure from cocos2d+chipmunk template and build OK.

* Classes/Chipmunk/include/src for 'src' folder
* Classes/Chipmunk/chipmunk for 'include' folder

Upvotes: 0

slembcke
slembcke

Reputation: 216

You should use the iphonestatic.command script in the macosx/ directory to build a static library and copy the headers for you like the README says. Then all you have to do is drop that folder into your project.

If you are just copying the sources into your project you are almost certainly missing several very important optimization flags. Don't do it!

Upvotes: 4

Related Questions