dlclose on FreeBSD


 
Thread Tools Search this Thread
Top Forums Programming dlclose on FreeBSD
# 1  
Old 06-12-2003
Question dlclose on FreeBSD

Anyone knows how to use dynamic module loading through dlopen/dlsym/dlclose properly on FreeBSD?

I wrote a tiny program to learn KDE programming. Perhaps I give you a small snippet to look at

Code:
int IPTablesApp::Start(int argc, char* argv[]) {
	typedef void (*init_t)(int, char*[]);
	init_t init;
	void *view = dlopen("./libkde-plugin.so", RTLD_NOW);
	if (!view) {
		// error loading libraries
		fprintf(stderr, "Interface library load error: %s\n", dlerror());
		return -1;
	} else {
		init = (init_t)dlsym(view, "_Init");
		init(argc, argv);
	}
	dlclose(view);
	return 0;
}

The KDE app is in libkde-plugin.so and is not shown here. Basically, when the app ends and execute the dlclose, gdb catches a segmentation fault for "Bad Address".

The same code runs okay on my Linux. Anyone can tell me if my way of using dl- functions are correct and are there workarounds (I saw some similar apps just comment out the dlclose line, but I don't know if this is proper or not)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Fedora

FreeBSD

I'm using Windows mostly and the only *nix thing I used during my life was cygwin (I like command line :)). But currently I have (by an occasion) a DVD with latest FreeBSD. I don't know why, but I want to install it... But probably, this OS is too difficult for a beginner. I heard, it's used on... (3 Replies)
Discussion started by: TeenageWerewolf
3 Replies

2. Programming

Application crashes in FreeBSD 7.1 while working ok in FreeBSD 6.3

Hello there, My mulithreaded application (which is too large to represent the source code here) is crashing after installing FreeBSD 7.1-RELEASE/amd64. It worked properly on others machines (Dual Cores with 4GB of RAM - FreeBSD 6.2-RELEASE/i386). The current machine has 2x Core 2 Duo... (1 Reply)
Discussion started by: Seenquev
1 Replies

3. Programming

dlclose crashing in 64bit

Hi I have a 64bit C++ dynamic component built using Sun Forte compiler(CC) on one server. I am opening this shared component using dlopen and checking if a particular function is defined or not. After that, when I am closing the component using dlclose, the program is crashing. The... (3 Replies)
Discussion started by: ajphaj
3 Replies

4. BSD

please help me in FreeBSD

Hi to all, Iam doing a project in Free BSD and i am stuck with a puzzle. Please any one of you clarify my doubt : How to add a mechanism to check the status of the file system which alerts the root user via. email if any single partition is greater than 90% full. This alert should include the... (3 Replies)
Discussion started by: tadakamalla
3 Replies

5. BSD

I want the Best FREEBSD

B]I want the best of the best FreeBSD version for my study in Unix...please sugest me... Thanks (5 Replies)
Discussion started by: israel
5 Replies

6. BSD

FreeBSD 5.2.1

I want someone tell me the positives and negatives points of FreeBSD 5.2.1, if someone help me, i thanks a lot! (4 Replies)
Discussion started by: israel
4 Replies

7. UNIX for Dummies Questions & Answers

FreeBSD

What is FreeBSD, who does use Free? (3 Replies)
Discussion started by: cyberangel
3 Replies

8. UNIX for Dummies Questions & Answers

Freebsd 4.5

i am new at unix and am VERY confused about the compression processes. what progs do i need to unzip and zip files? there must be a standard one similar to winzip? (1 Reply)
Discussion started by: Mindscan
1 Replies

9. UNIX for Dummies Questions & Answers

FreeBSD

I am on AOL now,and i am using 56 k,i was gonna install FreeBSD,but i dont know if aol works on BSD,or my modem. Do they work on BSD? (2 Replies)
Discussion started by: kita
2 Replies

10. UNIX for Dummies Questions & Answers

need help with FreeBSD!!!

Hi I want to write to my output_file using: if((fptr = creat(output_file, _S_IWRITE)) == -1) { printf("output_file..."..); return (1); } for(...) { _write(fptr, buffer, BUF_SIZE); } It says "_S_IWRITE" undeclared!!! Anybody knows what function I can use for that and what I... (3 Replies)
Discussion started by: lacasa
3 Replies
Login or Register to Ask a Question
dlclose(3C)						   Standard C Library Functions 					       dlclose(3C)

NAME
dlclose - close a shared object SYNOPSIS
#include <dlfcn.h> int dlclose(void *handle); DESCRIPTION
The dlclose() function decrements the reference count of the supplied handle. This handle represents an executable object file and its dependencies, acquired from a previous call to dlopen(). A handle that is no longer referenced is processed in an attempt to unload any objects that are associated with the handle from the current process. An unreferenced handle is no longer available to dlsym(). Any finalization code within an object is executed prior to that object being unloaded. Any routines registered by an object using atexit(3C) are called prior to that object being unloaded. See NOTES. RETURN VALUES
If the handle was successfully unreferenced, dlclose() returns 0. If the handle is invalid, or an error occurred as a result of unloading an object, dlclose() returns a non-zero value. Additional diagnostic information is available through dlerror(). USAGE
The dlclose() function is one of a family of functions that give the user direct access to the dynamic linking facilities. These facilities are available to dynamically-linked processes only. See the Linker and Libraries Guide. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ |MT-Level |MT-Safe | +-----------------------------+-----------------------------+ SEE ALSO
ld(1), ld.so.1(1), atexit(3C), dladdr(3C), dldump(3C), dlerror(3C), dlopen(3C), dlsym(3C), attributes(5), standards(5) Linker and Libraries Guide NOTES
A successful invocation of dlclose() does not guarantee that the objects associated with the handle are removed from the address space of the current process. Objects can be referenced by multiple handles, or by other objects. An object is not removed from the address space of the current process until all references to that object are removed. Once an object has been closed by dlclose(), referencing symbols contained in that object can cause undefined behavior. As part of unloading an object, finalization code within the object is called before the dlclose() returns. This finalization is user code, and as such, can produce errors that can not be caught by dlclose(). For example, an object loaded using RTLD_LAZY that attempts to call a function that can not be located, results in process termination. Erroneous programming practices within the finalization code can also result in process termination. The runtime linkers debugging facility can offer help identifying these types of error. See the LD_DEBUG environment variable of ld.so.1(1). SunOS 5.10 1 March 2004 dlclose(3C)