By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,176 Members | 1,101 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,176 IT Pros & Developers. It's quick & easy.

Creating a shared library and loading it

P: n/a
Hi ,

I am trying to create a shared library and trying to load it
usinf dlopen() function . My code and steps to create and load the *.so
is :

/*** test.c ***/
#include <stdio.h>
void test()
{
printf("Hello World\n");
}

/*** Steps for *.so creation ***/
bash-3.00# gcc -fPIC -c test.c
bash-3.00# gcc -o library.so -shared source.o
bash-3.00# gcc -o library.so -Wl,-h,library.so -shared source.o

/***load.c***/
#include <stdio.h>
#include <dlfcn.h>

int main(int argc,char **argv)
{
void *handle;
char *error;

handle = dlopen ("library.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}

}

/*** Steps for creating load executable***/
bash-3.00# gcc test.c -ldl

When I run the "a.out" it gives me the following error

bash-3.00# ./a.out
ld.so.1: a.out: fatal: library.so: open failed: No such file or
directory

Can someone tell me .. where I am wrong ?

Thanks !

Aug 26 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
ab*****@gmail.com wrote:
Hi ,

I am trying to create a shared library and trying to load it
usinf dlopen() function . My code and steps to create and load the *.so
is :

/*** test.c ***/
#include <stdio.h>
void test()
{
printf("Hello World\n");
}

/*** Steps for *.so creation ***/
bash-3.00# gcc -fPIC -c test.c
bash-3.00# gcc -o library.so -shared source.o
bash-3.00# gcc -o library.so -Wl,-h,library.so -shared source.o

/***load.c***/
#include <stdio.h>
#include <dlfcn.h>

int main(int argc,char **argv)
{
void *handle;
char *error;

handle = dlopen ("library.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}

}

/*** Steps for creating load executable***/
bash-3.00# gcc test.c -ldl

When I run the "a.out" it gives me the following error

bash-3.00# ./a.out
ld.so.1: a.out: fatal: library.so: open failed: No such file or
directory

Can someone tell me .. where I am wrong ?
You are wrong in posting here about it. Here we only
deal with standard C and things like dlfcn.h , dlopen()
etc. are not part of standard C. You should ask the
question at comp.unix.programmer or
comp.os.linux.development.apps

Spiros Bousbouras

Aug 26 '06 #2

P: n/a
ab*****@gmail.com wrote:
/*** Steps for *.so creation ***/
bash-3.00# gcc -fPIC -c test.c
bash-3.00# gcc -o library.so -shared source.o
bash-3.00# gcc -o library.so -Wl,-h,library.so -shared source.o
/*** Steps for creating load executable***/
bash-3.00# gcc test.c -ldl
I assume you meant to compile load.c here...
>
When I run the "a.out" it gives me the following error

bash-3.00# ./a.out
ld.so.1: a.out: fatal: library.so: open failed: No such file or
directory

Can someone tell me .. where I am wrong ?
You should either specify "./library.so" in load.c, or
set LD_LIBRARY_PATH. (At least, that works on
Linux...since dlopen() is not standard C, we are already
OT, and this thread really belongs on a different NG).
For example:

[tmp]$ export LD_LIBRARY_PATH=
[tmp]$ ./a.out
library.so: cannot open shared object file: No such file or directory
[tmp]$ export LD_LIBRARY_PATH=.
[tmp]$ ./a.out
[tmp]$


Stylistically, it's a bit odd to have a file called library.so, since
that implies that the library's name is "rary". The usual
naming convention is libNAME.so.

Aug 26 '06 #3

P: n/a

Bill Pursell wrote:
ab*****@gmail.com wrote:
/*** Steps for *.so creation ***/
bash-3.00# gcc -fPIC -c test.c
bash-3.00# gcc -o library.so -shared source.o
bash-3.00# gcc -o library.so -Wl,-h,library.so -shared source.o
/*** Steps for creating load executable***/
bash-3.00# gcc test.c -ldl

I assume you meant to compile load.c here...

When I run the "a.out" it gives me the following error

bash-3.00# ./a.out
ld.so.1: a.out: fatal: library.so: open failed: No such file or
directory

Can someone tell me .. where I am wrong ?

You should either specify "./library.so" in load.c, or
set LD_LIBRARY_PATH. (At least, that works on
Linux...since dlopen() is not standard C, we are already
OT, and this thread really belongs on a different NG).
For example:

[tmp]$ export LD_LIBRARY_PATH=
[tmp]$ ./a.out
library.so: cannot open shared object file: No such file or directory
[tmp]$ export LD_LIBRARY_PATH=.
[tmp]$ ./a.out
[tmp]$


Stylistically, it's a bit odd to have a file called library.so, since
that implies that the library's name is "rary". The usual
naming convention is libNAME.so.
Thanks Bill . It worked :- )

Aug 28 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.