linux下dlclose指针异常,用dlopen和dlsym得到的函数指针,在dlclose后还能继续使用么?...

不能dlclose的,除非你是确定不再使用了的才需要dlclose,否则不要执行这个操作

共享对象通过dlopen动态加载动态库的

加载完成后,通过dlsym定位到你需要执行的函数指针

然后可以在程序中使用

当不需要使用的时候,再执行dlclose卸载掉动态链接库

自己去一个个函数man一下就明白了,顺手贴给你

dlopen -- open a dynamically linked library

Syntax

======

cc . . . -lc

#include

void *dlopen(const char *pathname, int mode);

dlsym -- get the address of a symbol in a dynamically linked library

Syntax

======

cc . . . -lc

#include

void *dlsym(void *handle, const char *name);

Example:

void *handle;

int i, *iptr;

int (*fptr)(int);

/* open the needed object */

handle = dlopen("/usr/mydir/libx.so", RTLD_LAZY);

/* find address of function and data objects */

fptr = (int (*)(int))dlsym(handle, "some_function");

iptr = (int *)dlsym(handle, "int_object");

/* invoke function, passing value of integer as a parameter */

i = (*fptr)(*iptr);

dlclose -- close a dynamically linked library

Syntax

======

cc . . . -lc

#include

int dlclose(void *handle);

Description

===========

dlclose(S) disassociates a shared object (a dynamically linked library in

our case) previously opened by dlopen(S) from the current process. Once an

object has been closed using dlclose( ), its symbols are no longer

available to dlsym(S). All objects loaded automatically as a result of

invoking dlopen( ) on the referenced object are also closed. handle is the

invoking dlopen( ) on the referenced object are also closed. handle is the

value returned by a previous invocation of dlopen( ).

Return values

=============

If the referenced object was successfully closed, dlclose( ) returns 0. If

the object could not be closed, or if handle does not refer to an open

object, dlclose( ) returns a non-zero value. More detailed diagnostic

information is available through dlerror(S).

Notes

=====

A successful invocation of dlclose( ) does not guarantee that the objects

associated with handle have actually been removed from the address space of

the process. Objects loaded by one invocation of dlopen( ) may also be

loaded by another invocation of dlopen( ). The same object may also be

opened multiple times. An object is not removed from the address space

until all references to that object through an explicit dlopen( )

invocation have been closed and all other objects implicitly referencing

that object have also been closed.

associated with handle have actually been removed from the address space of

the process. Objects loaded by one invocation of dlopen( ) may also be

loaded by another invocation of dlopen( ). The same object may also be

opened multiple times. An object is not removed from the address space

until all references to that object through an explicit dlopen( )

invocation have been closed and all other objects implicitly referencing

that object have also been closed.

Once an object has been closed by dlclose( ), referencing symbols contained

in that object can cause undefined behavior.

See also

========

dlerror(S), dlopen(S), dlsym(S)

Standards conformance

=====================

dlclose(S) is not part of any currently supported standard; it is an

extension of AT&T System V provided by The Santa Cruz Operation, Inc.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值