- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有没有办法让共享库在加载时得到“通知”?
换句话说,假设我在共享库上使用dlopen,是否有一个函数在共享库(例如main?)上自动调用(如果存在)
最佳答案
Libraries should export initialization and cleanup routines using the gcc __attribute__((constructor)) and __attribute__((destructor)) function attributes. See the gcc info pages for information on these. Constructor routines are executed before dlopen returns (or before main() is started if the library is loaded at load time). Destructor routines are executed before dlclose returns (or after exit() or completion of main() if the library is loaded at load time). The C prototypes for these functions are:
void __attribute__ ((constructor)) my_init(void);
void __attribute__ ((destructor)) my_fini(void);
取自http://tldp.org/HOWTO/Program-Library-HOWTO/index.html
也就是说,您只需将 __attribute__ ((constructor)) 添加到您希望在加载共享库时调用的函数。上面的文档还指出,较旧的 _ini 和 _fini 函数被认为已过时。
关于Linux dlopen : can a library be "notified" when it is loaded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602398/
每当在同一进程中使用 Linux 上的 dlopen() 函数从任何其他库加载任何新库时,我能否在我的库中获得通知?谢谢。 最佳答案 构建一个 library interposer插入 dlopen(
如果我的可执行文件调用 dlopen 来加载一个库但忽略了调用 dlclose,该库将保持加载状态直到进程退出并且操作系统强制它卸载。 如果我加载 a.so 加载 b.so,然后在 a.so 上调用
两次不同的 dlopen 和 dlclose 几次,在 dlopen 上被阻止。 卡在dlopen上,它不输出任何内容,cpuidle降至0%,并且无法通过ctrl+c退出。 LOG_TRACE("a
package com.test.nativeapp; import android.support.v7.app.ActionBarActivity; import android.os.Bundl
我在 channelReceiver.c 中使用 md5使用 jni 文件 MD5_CTX td; MD5_Init(&td); block = malloc(176); MD5_Update(&td
假设我有一个 parent 和一个 child , child 用 dlopen 在 child 中调用函数“hello”。然后 child 可以在 parent 中调用函数“world”吗?我不断收
根据文档,dlopen与 dlsym 结合使用加载库,并获取指向符号的指针。 但这已经是动态加载器/链接器所做的。 而且,这两种方法都是基于ld.so . 使用 dlopen 时实际上似乎有两个不同之
我需要从另一个程序调用一个函数。如果另一个程序是一个库,我可以简单地使用 dlopen 和 dlsym 来获取该函数的句柄。不幸的是,另一个程序是 Unix 可执行文件,并且不能将其构建为库。在可执行
我的程序使用通过 dlopen() 动态加载的插件。这些插件的位置可以是任意的,因此它们不一定在库路径中。在某些情况下,一个插件需要依赖另一个插件。因此,如果 A 和 B 是动态库,我将首先加载 A,
尝试通过 dlopen 加载模块(共享对象)时,加载失败。 比如说,我的 testshobj.c 具有以下内容: // testobj.c int dummy() { return 5; }
我正在 linux 中使用“dlopen”制作一个插件系统。有一个在插件之间传输数据(JSON)的中央应用程序。我们可以使用 try-catch 子句处理抛出的异常。我的问题是关于终止程序的错误,比如
我有一个奇怪的错误,上面写着: java.lang.UnsatisfiedLinkError: dlopen failed: cannot find "./obj/local/armeabi-v7a/
我在网上搜索后似乎找不到答案。 当我第一次使用 dlopen 时,它似乎比之后的任何时候都花费更长的时间,包括如果我从一个程序的多个实例运行它。 dlopen 是否将 so 加载到内存中一次并让操作系
在 C++ 中使用 dlopen 时,我正在努力思考工厂模式在内部是如何工作的。很抱歉发了很长的帖子。 tl;博士;问题在下面的粗体中。 来自 http://www.tldp.org/HOWTO/C+
我正在使用 dlopen 加载动态生成的代码。程序在代码上调用编译器并生成一个 .so 文件,然后程序加载该文件以扩展自身。 问题是,如果我对生成的代码使用相同的名称,dlopen 会返回旧对象的句柄
sharedlibrary通过LD_PRELOAD加载,同库的构造函数调用dlopen("libc.so.6") 问题是dlopen一直在用,调试显示如下dlopen 调用 __dlopen 调用 c
作为这篇文章的延续 C pluginsystem: symbol lookup error ,我还在写我的插件系统,遇到新的bug。 回顾一下插件是什么,该程序由一个由外壳接口(interface)的
我有一个程序调用 dlopen(使用 RTLD_NOW)来动态加载一个库,该库的完整路径在运行时指定,但程序首次执行时不知道。指定的库动态链接到另一个 .so 文件,该文件的位置直到程序启动后才知道,
除了共享对象不存在之外,dlopen 可能出现段错误的一些原因是什么? 在我的例子中,我知道共享对象存在,但是当我的程序使用 dlopen 加载它时,它会出现段错误。我检查了我的 lib 文件夹,共享
我试图让一个共享库从它被加载到的进程中调用一个函数。该库是用 C 语言编写的,即 C++ 中的“内核”。 内核.cpp: #include #include typedef void(*func_
我是一名优秀的程序员,十分优秀!