So Bill, what you are trying to do? 
Both Alien and FFI allow you to open an arbitrary executable/library/etc.  Then 
let you setup and call and retrieve data from any exported procedure within the 
binary, so you need to recreate that functionality because? 

On 2010-04-02, at 5:55 AM, Schwab,Wilhelm K wrote:

> Sorry for any duplication, but this should be visible by now (I think). 
> 
> 
> 
> 
> -----Original Message-----
> From: Schwab,Wilhelm K 
> Sent: Friday, April 02, 2010 7:24 AM
> To: [email protected]; [email protected]
> Subject: dlopen: I'm stumped
> 
> Hello all,
> 
> Attached is my attempt at calling dlopen() from Pharo, and it is not going 
> well.  The C code below works as expected, so the problem has to be either in 
> my code or something in Pharo or the VM itself.
> 
> I am fairly certain that loading the attached is safe, but 
> 
>               DynamicLinkingLibrary
>                       getProcAddress:'cos'
>                       from:'libm.so'.
> 
> crashes the vm in my experience.  Any ideas?
> 
> Bill
> 
> 
> 
> /*
>       http://www.unix.com/man-page/All/3/dlopen/
> 
>        Build as:
> 
>               gcc -rdynamic -o fubar fubar.c -ldl
> */
> 
>       #include <stdio.h>
>       #include <stdlib.h>
>       #include <dlfcn.h>
> 
>       int
>       main(int argc, char **argv)
>       {
>          void *handle;
>          double (*cosine)(double);
>          char *error;
> 
>          handle = dlopen("libm.so", RTLD_LAZY);
>          if (!handle) {
>              fprintf(stderr, "%s\n", dlerror());
>              exit(EXIT_FAILURE);
>          }
> 
>          dlerror();    /* Clear any existing error */
> 
>          /* Writing: cosine = (double (*)(double)) dlsym(handle, "cos");
>             would seem more natural, but the C99 standard leaves
>             casting from "void *" to a function pointer undefined.
>             The assignment used below is the POSIX.1-2003 (Technical
>             Corrigendum 1) workaround; see the Rationale for the
>             POSIX specification of dlsym(). */
> 
>          *(void **) (&cosine) = dlsym(handle, "cos");
> 
>          if ((error = dlerror()) != NULL)  {
>              fprintf(stderr, "%s\n", error);
>              exit(EXIT_FAILURE);
>          }
> 
>          printf("%f\n", (*cosine)(2.0));
>          dlclose(handle);
>          exit(EXIT_SUCCESS);
>       }
> <DynamicLinkingLibrary.st>_______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

--
===========================================================================
John M. McIntosh <[email protected]>   Twitter:  squeaker68882
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
===========================================================================




Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to