dlopen help


 
Thread Tools Search this Thread
Top Forums Programming dlopen help
# 1  
Old 09-17-2008
dlopen help

Code:
//foo.c

#include<stdio.h>

int pen(int a)
{
    printf("%d",a);
}

$cc -c foo.c
$ls -shared -o libfoo.so foo.o

Code:
///////////now libfoo.so formed 
//i have already designed libfoo.so
//main.c

#include<stdio.h>
#include <dlfcn.h>
int main()
{
   int (*p)(int)=NULL ;
   void *handle;
   handle=dlopen("libfoo.so",RTLD_LAZY);
   p=dlsym(handle,"pen");
   (*p)(5);
   return 0;
}

/////////////////////////////////////////////////////////////////////////////////////////

but this gives error
Code:
$ cc main.c -ldl
$ ./a.out
Segmentation fault


Last edited by vino; 09-19-2008 at 02:32 AM.. Reason: added code tags
# 2  
Old 09-19-2008
You have no error checking, for starters. This will tell you where things go wrong.
Code:
#include<stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
int main()
{
   int (*p)(int)=NULL ;
   void *handle;
   handle=dlopen("libfoo.so",RTLD_LAZY);
   if (!handle) 
  {
	fputs (dlerror(), stderr);
	exit(1);
   }

   p=dlsym(handle,"pen");
   {
          char *err=dlerror();
          if(err!=NULL)
          {
                fputs(err,stderr);
                exit(1);                
           }
    }

   (*p)(5);
   return 0;
}

# 3  
Old 09-19-2008
In addition to error checking you need to cast the operands and function return values to the proper type before assignment. Source code changes highlighted in red.
Code:
#include <stdio.h>
#include <dlfcn.h>

int main(void)
{
   int (*p)(int)=NULL;
   int i;
   void *handle;
   handle=dlopen("libfoo.so",RTLD_LAZY);

   /* cast the return value from dlsym() to the proper type before assignment to p
      p is a pointer to a function that takes an int argument and return an int */
   p=((int) (*)(int)) dlsym(handle,"pen");
   
   /* capture the integer return value from the shared library */
   i = (*p)(5); 
   return 0;
}


Last edited by shamrock; 09-19-2008 at 03:04 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

dlopen Linux vs. OSX

I've got a C++ program and some plugins ( shared objects ) that I have been developing for Linux. I was originally using and OSX machine to develop and test most of the code. I use dlopen to open the shared objects and then call methods from them. It behaves differently on Linux ( don't know the... (3 Replies)
Discussion started by: rfkrakora
3 Replies

2. AIX

Coredump in _Init when used dlopen() on AIX 6.1

Hello, One of our Customer is getting Coredump when our application is trying to load a library(one of our products library) using dlopen() on AIX 6.1. Our application and our shared library are built on AIX 5.3 machine using xlC compiler. we have tried executing the same application on... (2 Replies)
Discussion started by: erra_krishna
2 Replies

3. Programming

Linux: dlopen fails to find symbols

I've attached a tar.gz containing three tests to demonstrate the problem I'm having. Within the tar are two shared libraries, two test applications, and a Makefile that builds the three tests. The shared libaries are libshlib1.so and libshlib2.so. Both export a function, libFunc, which takes... (5 Replies)
Discussion started by: DreamWarrior
5 Replies

4. Programming

Dynamic library load with dlopen

Hi, I created two library libsum.so and libproduct.so. In the libproduct.so is defined function "product" that use function "sum" defined in libsum.so. So libproduct depends on libsum. In main function I called product function by a dlopen request. Unfortunaly, when I execute program I have an... (5 Replies)
Discussion started by: shade82
5 Replies

5. Solaris

dlopen() on dolaris

Dear experts, please help #include <stdio.h> #include <dlfcn.h> #include <link.h> #include <iostream.h> #include<stdlib.h> #include<errno.h> void main() { printf("\n in the main\n"); void *handle; handle = dlopen("my.so", RTLD_LAZY); if( handle ==... (2 Replies)
Discussion started by: vin_pll
2 Replies

6. Programming

resolve_symbols: loader error: dlopen:

when i try to run an executable i got the following error message: resolve_symbols: loader error: dlopen: what does this error mean and what should be done to avoid this? with regards (1 Reply)
Discussion started by: gfhgfnhhn
1 Replies

7. Programming

compile error while using dlopen

Hi unix lovers, I am getting error while compile a function which uses dlopen. My code is I am getting error as follows Am I missing something? I think I am missing a lot :-) I am using solaris. Thanks in advance, -Ashish (5 Replies)
Discussion started by: shriashishpatil
5 Replies

8. Programming

default location of libs in dlopen

Hi Where is the default location of libs to search, when we specify any lib in dlopen function. And if we want to specify a custom location, how will we do it? thanks. (1 Reply)
Discussion started by: sumsin
1 Replies

9. Programming

dlopen failed!

I can open my so file successfully by calling dlopen directly in my main function. But if I fork a child process, and call dlopen in child process, it failed! I don't know why. Following is my code: #include <stdio.h> #include <errno.h> #include <dlfcn.h> void childFunc(void) { void... (1 Reply)
Discussion started by: virmin
1 Replies

10. Solaris

dlopen issue with a dll

HI All, I am trying to use a dll using dlopen but in vain. When I try to ldd that dll it returns no output. Can anybody please tell me how I can load this dll in my process space. PS: ldd -l returns a lot of unsatisfied dependent symbols. Thanks a lot in advance Codeman (0 Replies)
Discussion started by: codeman
0 Replies
Login or Register to Ask a Question