problem with shared library and dlopen() function

Michał Cieślak admin.michalc at gmail.com
Wed Aug 22 15:53:04 PDT 2007


At first I want to apologize for my English. I want to rewrite my Java
program to D. I have problem with shared library and dlopen() function.

calc_mean.d:

extern(C){
     double mean(double a, double b) {
             return (a+b) / 2;
     }
}

dmd -fPIC calc_mean.d -c
gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1  calc_mean.o -m32


test.d:

import std.stdio;
import std.c.linux.linux ;

public void main(){
     void *handle;
     double (*reff)(double, double);

     handle = dlopen("./libmean.so.1.0.1", RTLD_NOW);

     char *errstr = dlerror();

     if(errstr != null)
          printf ("A dynamic linking error occurred: (%s)\n", errstr);

     *cast(void **)(&reff) = dlsym(handle, "mean");
     errstr = dlerror();

     if(errstr != null)
          printf ("A dynamic linking error occurred: (%s)\n", errstr);

     writefln((*reff)(1,12));
}



dmd test -L-ldl

./test :

./test
A dynamic linking error occurred: (./libmean.so.1.0.1: undefined symbol:
_Dmodule_ref)
A dynamic linking error occurred: (./test: undefined symbol: mean)
Segmentation fault

I am 17, so I am novice programmer. I don't know what I am doing wrong.
Please help me.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20070823/81aaa46c/attachment.htm 


More information about the Digitalmars-d-learn mailing list