[PD] dynamic loading in external

Joel Matthys jwmatthys at gmail.com
Fri Jan 9 22:50:39 CET 2015


I think you need to use Pd's c_externdir method to determine the 
extern's path. This is basicaly how I opened a .so in an external:

void *my_extern_tilde_new(t_symbol *s, int argc, t_atom *argv)
{
   // creates the object
   t_my_extern *x = (t_my_extern *)pd_new(my_extern_class);

   // using Pd's open_via_path to find myextern, and from there 
my_other_lib.so
char *externdir = myextern_class->c_externdir->s_name;
    x->my_other_lib = dlopen(externdir,  RTLD_NOW | RTLD_LOCAL);
...

Joel

On 01/09/2015 03:34 PM, David Medine wrote:
> I am writing an extern that uses a 3rd party shared object library. I 
> keep getting a
> "cannot open shared object file: No such file or directory"
> posted to the Pd console when I load the extern. The library is 
> linking properly in my makefile (as far as I can tell) and the .so 
> file that I want the extern to load is in the same folder as the 
> extern. I have also put the path to the unfound library in Pd's path 
> list.
>
> I have also compiled a different, plain old dylib/shared object/dll 
> using this very same library for use in python and it works perfectly. 
> I've also written C and C++ programs that link to this library at run 
> time and they work perfectly too. Does anybody have any idea why Pd 
> hates it?
>
> I have also done dynamic loading successfully in a Pd extern using the 
> sphinx library. The only difference there was that there the sphinx 
> libraries were installed in a standard library directory (ie /usr/lib 
> or something like that) . I can't try to do this right now because I 
> don't have su rights on the computer I am using. My understanding, 
> though, is that linux should be searching for dynamic libraries in the 
> directory that the parent application is in. So I also tried putting 
> my unfound library in pd-0-whatever/bin. No joy.
>
> I have tried compiling using gcc and g++ on linux. I've also tried to 
> link with those compilers as well as ld (which is called by those 
> compilers if you link with them). I haven't tried any other OSs yet.
>
> Thanks in advance,
> David
>
> _______________________________________________
> Pd-list at lists.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/20150109/2d6a026b/attachment.html>


More information about the Pd-list mailing list