[PD] [Pd] Compile external with C++ compiler?

Ed Kelly morph_2016 at yahoo.co.uk
Fri Apr 27 22:54:33 CEST 2012


It's really easy actually.

You make the object in C, compile it and then build your patch in pd vanilla + the object.
Then in the xcode object you just call the setup function for the object, the source code for which gets included in the xcode project.
That's all I know. I'm not responsible for the Xcode/C++ of this app, only the Pd patch and Pd objects, so there may be more to it. It's quite simple though, my developer colleague tells me.
Don't forget, C is a subset of C++!


Ed

 
Gemnotes-0.1alpha: Live music notation for Pure Data
http://sharktracks.co.uk/


________________________________
 From: Joe White <white.joe4 at gmail.com>
To: Charles Henry <czhenry at gmail.com> 
Cc: pd-list <pd-list at iem.at> 
Sent: Friday, 27 April 2012, 9:56
Subject: Re: [PD] [Pd] Compile external with C++ compiler?
 

Hi Charles,

Thanks for replying!

I don't believe it's a problem calling C functions, you just have to declare them with 'extern "C"' to avoid name mangling (I think??). 

The issue is, when I want to use C++ I have to switch the implementation file to ".mm", which is a Objective-C++ file. As soon as I do this Xcode starts complaining about 'class_addmethod()' in my setup function. The weird thing is that it only applies to 'class_addmethod()'. For example, 'class_addbang()', 'class_new()' all work fine. 

It seems like it's an issue only with this function, and it looks like class_addMethod is already a function used by Objective-C  I think maybe there's some namespace issues, but I have no idea how to resolve this. 

wrote wrapper functions to export a C-callable public interface to C++ functions. 

Yep, this is what I'm doing now. A bit annoying because I was so close :) 

Thanks for your help!

Cheers,
Joe 

On 27 April 2012 04:10, Charles Henry <czhenry at gmail.com> wrote:

Hi guys
>
>The part that I don't get is how to call C functions from C++? I don't
>think I've even tried that before.  Have you?
>Joe: I've built externals that just call C++ functions that I declared
>with extern "C" or wrote wrapper functions to export a C-callable
>public interface to C++ functions.  Best suggestion I've got is to
>identify which functions you've got are going to be public and which
>ones are private and plan out how you're going to declare them.
>
>Chuck
>
>
>On 4/26/12, Ed Kelly <morph_2016 at yahoo.co.uk> wrote:
>> Hi Joe,
>>
>> Have you thought of using ofxPd?
>>
>> I'm involved in the creation of an app for the iPhone right now, and we're
>> using ofxPd from Dan Wilcox:
>> https://github.com/danomatika/ofxPd
>> Since Openframeworks is a bunch of C++ wrappers for various libraries, ofxPd
>> adds Pd to the libraries that you can work with in C++.
>> Then you can call the setup function within the xcode build, and your object
>> will work in libpd (i.e. ofxPd) in the app environment.
>> Bear in mind that Apple do not like GnuGPL licensed stuff, so I've created
>> BSD licensed versions of some of my own Pd externals for this project.
>>
>>
>> And the app works. We're in the final stages now, so I'll post to the list
>> when it's complete!
>> Best,
>> Ed
>>
>>
>> Gemnotes-0.1alpha: Live music notation for Pure Data
>> http://sharktracks.co.uk/
>>
>>
>> ________________________________
>>  From: Joe White <white.joe4 at gmail.com>
>> To: pd-list <pd-list at iem.at>
>> Sent: Thursday, 26 April 2012, 16:51
>> Subject: [PD] [Pd] Compile external with C++ compiler?
>>
>>
>> Hi all,
>>
>> Thought I might as well ask this here because you guys know everything :)
>>
>> I'm writing an external to be built into an iOS app that's running Pd. The
>> catch is I need to interface with a C++ library within the external.
>>
>> The external builds and runs fine if I'm using the C compiler (in Xcode) but
>> I can't access the C++ library functions. If I switch it to compile in C++
>> (by changing the objective-c file from .m to .mm) then I can use the C++
>> library functions but it complains that it can't find 'class_addmethod'
>>
>>                           'No matching function for call to
>> 'class_addmethod'
>>
>> I've tried declaring the setup function as C code like Katja explains on her
>> site:
>>                           extern "C" void external_tilde_setup(void) { }
>> But that still didn't seem to work. I was also going through the list and
>> found this thread but I'm not sure if it's the right approach. Plus I'm more
>> of an audio guy than programmer :)
>>
>> Any ideas would be much appreciated.
>>
>> Thanks,
>> Joe
>> --
>> Follow me on Twitter @diplojocus
>>
>> _______________________________________________
>> Pd-list at iem.at mailing list
>> UNSUBSCRIBE and account-management ->
>> http://lists.puredata.info/listinfo/pd-list
>
>_______________________________________________
>Pd-list at iem.at mailing list
>UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
>


-- 
Follow me on Twitter @diplojocus

_______________________________________________
Pd-list at iem.at mailing list
UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20120427/4efad7ec/attachment.htm>


More information about the Pd-list mailing list