[memo] dlopen 与 --export-dynamic
来源:互联网 发布:逆袭网络剧第一季 编辑:程序博客网 时间:2024/05/16 14:33
先看看状况(小心头疼)
client.c 编译得到 client;在 client 的 main 中用 dlopen( "./liba.so", RTLD_LAZY|RTLD_GLOBAL) 打开 liba.so,并调用 liba.so 中的 start 函数;在 liba.so 的 start 函数中通过 dlopen( 0, RTLD_GLOBAL|RTLD_LAZY ) 得到的句柄尝试调用 client 中的 startup_fcn 函数。使用 gcc client.c -o client -ldl 得到的 client 与 gcc -fPIC -shared liba.c -o liba.so 得到的 liba.so 的时候发现 liba.so 无法找到 client 中定义的 startup_fcn 函数。后经 pacman2k 大侠的提醒,发现了 ld 的参数 -E / --export-dynamic。使用 gcc -Wl,-E client.c -o client 重新编译 client 程序之后就可以成功调用了。
关于 -E 参数:
-E
--export-dynamic
When creating a dynamically linked executable, add all symbols to the dynamic symbol table. The
dynamic symbol table is the set of symbols which are visible from dynamic objects at run time.
If you do not use this option, the dynamic symbol table will normally contain only those symbols
which are referenced by some dynamic object mentioned in the link.
If you use "dlopen" to load a dynamic object which needs to refer back to the symbols defined by the
program, rather than some other dynamic object, then you will probably need to use this option when
linking the program itself.
最后一段正说道这种『回调的情况』
关于 RTLD_GLOBAL
经测试,所有 dlopen 均取消 RTLD_GLOBAL 参数之后,仍然运行正常。RTLD_GLOBAL 参数的作用有待考察。
- [memo] dlopen 与 --export-dynamic
- dlopen与dlsym用法
- dlopen与dlsym
- dlopen 与dlsym
- dlopen 与dlsym 学习
- dlopen与dlsym用法
- dlopen 与dlsym
- dlopen与dlsym用法
- dlopen与dlsym用法
- dlopen与dlsym
- export 与export default区别
- DP(Dynamic Programming) demo: optimal substructure(recursion) + overlapping structure(memo)
- dlopen
- dlopen()
- dlopen
- dlopen
- dlopen
- dlopen与dlsym的使用
- 色彩时光
- 项目的build.xml文件 自动从starteam获取新版本 ,自动编译打包
- China-pub 三颗心
- 排列组合公式
- hitzxl在百度搜索一下
- [memo] dlopen 与 --export-dynamic
- 注入Hook技术 -- DLL注入
- 123
- ASP错误代码总结
- ASP.Net中用DataGrid操作数据库
- 在本地计算机无法启动windows installer服务.错误997:重叠I/O操作进行中
- 正则表达式语法
- Asp中一些FSO方面的函数
- IBM MQ Client 错误 "unable to load mqic32.dll " 的解决办法! from Wells !