Sponsored Content
Top Forums Programming debugging a shared library (unix) Post 302097000 by nadiamihu on Tuesday 21st of November 2006 05:05:09 AM
Old 11-21-2006
debugging a shared library (unix)

How can I debug a C++ program (unix) that uses a dinamycaly linked library (dlopen(), dlsym())? I mean I want to be able to go through the library code too. I used ddd, but it's not working.

thanks in advance!

nadia
 

9 More Discussions You Might Find Interesting

1. Programming

Shared Library

hello all I want to work in shared libraries how can i work in Linux Environment ? (2 Replies)
Discussion started by: rajashekaran
2 Replies

2. UNIX for Advanced & Expert Users

debugging shared objects

Hi, i am trying to debug a binary which is using a shared lib. but i could not succeed in tracking the code flow in the classes defined in this library. i get: class MyClass <opaque> error i followed the instructions in the link below:... (0 Replies)
Discussion started by: yakari
0 Replies

3. UNIX for Dummies Questions & Answers

Listing the contents of a shared Unix library

I am brand new to Unix. This is probably simple, but how do you list the contents of a shared library? I need to see which functions exist in it. Many thanks. (1 Reply)
Discussion started by: mickpoil
1 Replies

4. UNIX for Dummies Questions & Answers

Link error while linking a shared library in unix

Getting the following error , ld: /opt/syncsort39/lib/libsyncsort.sl: Mismatched ABI. 64-bit PA shared library found in 32-bit link. Is there any difference in the ld options in opt file while linking a 64 bit shared library ? Or is the problem because we are trying to link both 32 bit and 64... (3 Replies)
Discussion started by: arunkumar_mca
3 Replies

5. Programming

Shared memory in shared library

I need to create a shared library to access an in memory DB. The DB is not huge, but big enough to make it cumbersome to carry around in every single process using the shared library. Luckily, it is pretty static information, so I don't need to worry much about synchronizing the data between... (12 Replies)
Discussion started by: DreamWarrior
12 Replies

6. Programming

Shared memory for shared library

I am writing a shared library in Linux (but compatible with other UNIXes) and I want to allow multiple instances to share a piece of memory -- 1 byte is enough. What's the "best" way to do this? I want to optimize for speed and portability. Obviously, I'll have to worry about mutual exclusion. (0 Replies)
Discussion started by: otheus
0 Replies

7. Shell Programming and Scripting

How to change a Makefile from building static library to shared library?

Hi: I have a library that it only offers Makefile for building static library. It built libxxx.a file. How do I in any way build a shared library? (either changin the Makefile or direct script or command to build shared library) Thanks. (1 Reply)
Discussion started by: cpthk
1 Replies

8. Programming

Shared library with acces to shared memory.

Hello. I am new to this forum and I would like to ask for advice about low level POSIX programming. I have to implement a POSIX compliant C shared library. A file will have some variables and the shared library will have some functions which need those variables. There is one special... (5 Replies)
Discussion started by: iamjag
5 Replies

9. AIX

Add shared members from library to same library in a different directory

I'm trying to install libiconv to AIX 7.1 from an rpm off of the perzl site. The rpm appears to install but I get this error message. add shr4.o shared members from /usr/lib/libiconv.a to /opt/freeware/lib/libiconv.a add shr.o shared members from /usr/lib/libiconv.a to ... (5 Replies)
Discussion started by: kneemoe
5 Replies
DLOPEN(3)						     Linux Programmer's Manual							 DLOPEN(3)

NAME
dlclose, dlerror, dlopen, dlsym - Programming interface to dynamic linking loader. SYNOPSIS
#include <dlfcn.h> void *dlopen(const char *filename, int flag); const char *dlerror(void); void *dlsym(void *handle, char *symbol); int dlclose(void *handle); Special symbols: _init, _fini. DESCRIPTION
dlopen loads a dynamic library from the file named by the null terminated string filename and returns an opaque "handle" for the dynamic library. If filename is not an absolute path (i.e., it does not begin with a "/"), then the file is searched for in the following loca- tions: A colon-separated list of directories in the user's LD_LIBRARY_PATH environment variable. The list of libraries cached in /etc/ld.so.cache. /lib, followed by /usr/lib. If filename is a NULL pointer, then the returned handle is for the main program. External references in the library are resolved using the libraries in that library's dependency list and any other libraries previously opened with the RTLD_GLOBAL flag. If the executable was linked with the flag "-rdynamic", then the global symbols in the executable will also be used to resolve references in a dynamically loaded library. flag must be either RTLD_LAZY, meaning resolve undefined symbols as code from the dynamic library is executed, or RTLD_NOW, meaning resolve all undefined symbols before dlopen returns, and fail if this cannot be done. Optionally, RTLD_GLOBAL may be or'ed with flag, in which case the external symbols defined in the library will be made available to subsequently loaded libraries. If the library exports a routine named _init, then that code is executed before dlopen returns. If the same library is loaded twice with dlopen(), the same file handle is returned. The dl library maintains link counts for dynamic file handles, so a dynamic library is not deallocated until dlclose has been called on it as many times as dlopen has succeeded on it. If dlopen fails for any reason, it returns NULL. A human readable string describing the most recent error that occurred from any of the dl routines (dlopen, dlsym or dlclose) can be extracted with dlerror(). dlerror returns NULL if no errors have occurred since initialization or since it was last called. (Calling dlerror() twice consecutively, will always result in the second call returning NULL.) dlsym takes a "handle" of a dynamic library returned by dlopen and the null terminated symbol name, returning the address where that symbol is loaded. If the symbol is not found, dlsym returns NULL; however, the correct way to test for an error from dlsym is to save the result of dlerror into a variable, and then check if saved value is not NULL. This is because the value of the symbol could actually be NULL. It is also necessary to save the results of dlerror into a variable because if dlerror is called again, it will return NULL. There are two special pseudo-handles, RTLD_DEFAULT and RTLD_NEXT. The former will find the first occurrence of the desired symbol using the default library search order. The latter, which is usable only from within a dynamic library, will find the next occurrence of a func- tion in the search order after the current library. This allows one to provide a wrapper around a function in another shared library. dlclose decrements the reference count on the dynamic library handle handle. If the reference count drops to zero and no other loaded libraries use symbols in it, then the dynamic library is unloaded. If the dynamic library exports a routine named _fini, then that routine is called just before the library is unloaded. RETURN VALUE
dlclose returns 0 on success, and non-zero on error. EXAMPLE
Load the math library, and print the cosine of 2.0: #include <stdio.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 ", dlerror()); exit(1); } cosine = dlsym(handle, "cos"); if ((error = dlerror()) != NULL) { fprintf (stderr, "%s ", error); exit(1); } printf ("%f ", (*cosine)(2.0)); dlclose(handle); return 0; } If this program were in a file named "foo.c", you would build the program with the following command: gcc -rdynamic -o foo foo.c -ldl NOTES
The symbols RTLD_DEFAULT and RTLD_NEXT are defined by <dlfcn.h> only when _GNU_SOURCE was defined before including it. ACKNOWLEDGEMENTS
The dlopen interface standard comes from Solaris. The Linux dlopen implementation was primarily written by Eric Youngdale with help from Mitch D'Souza, David Engel, Hongjiu Lu, Andreas Schwab and others. The manual page was written by Adam Richter. SEE ALSO
ld(1), ld.so(8), ldconfig(8), ldd(1), ld.so.info Linux 2001-12-14 DLOPEN(3)
All times are GMT -4. The time now is 07:32 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy