先看看状况(小心头疼)

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相关推荐

  1. react引入多个图片_重新引入React:v16之后的每个React更新都已揭开神秘面纱。

    react引入多个图片 In this article (and accompanying book), unlike any you may have come across before, I w ...

  2. linux 无法加载动态库,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    比较懒,而且时间也不早了,就贴上英文,以后有机会在翻译吧. DLOPEN(3)     Linux Programmer's Manual  DLOPEN(3) NAME dladdr, dlclos ...

  3. linux动态库注册函数,linux下加载动态库函数

    比较懒,而且时间也不早了,就贴上英文,以后有机会在翻译吧. DLOPEN(3)     Linux Programmer's Manual  DLOPEN(3) NAME dladdr, dlclos ...

  4. react开发插件-ES7 React/Redux/GraphQL/React-Native snippets

    内容目录 ES7 React/Redux/GraphQL/React-Native snippets 插件 Basic Methods React React Native Redux PropTyp ...

  5. React实现(Web端)网易云音乐项目(一),错过了真的可惜呀

    首先肯定是搭建项目的结构了,通过脚手架安装这部分我就不说了 首先看项目的目录结构 assets:放我们的静态资源,图片,字体和公共初始样式等 common:放我们公共的JS文件 components: ...

  6. 关于openGL, openGL ES, openVG及android中2D调用关系的报告

    关于openGL, openGL ES, openVG及android中2D调用关系的报告 http://blog.chinaunix.net/u3/99423/showart_2203591.htm ...

  7. Geogebra键盘输入快捷键

    http://wiki.geogebra.org/en/Keyboard_Shortcuts Keyboard Shortcuts  Key Shortcut(Windows) Shortcut(Ma ...

  8. geogebra快捷键

    Key Shortcut(Windows) Shortcut(Mac OS X) Action A Ctrl + A Cmd + A Select All 全选 A Ctrl + Shift + A ...

  9. skynet源码赏析

    skynet源码赏析 对于skynet,需要屡清楚的几个问题 skynet本质上解决什么问题? skynet有哪些基本的数据结构? skynet有几类线程,他们分别的作用是什么? skynet如何启动 ...

最新文章

  1. printf输出字符串的一些格式
  2. Python之路【第一篇】:Python简介和入门
  3. c语言 if 按大小顺序排序,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  4. == 和 equals方法的区别
  5. highgui java opencv_OpenCV在C Qt应用程序中的highgui
  6. JSP直接调用一个action定向到页面
  7. 【浅说】堆(heap)和栈(stack)区别
  8. c语言程序创建的基本步骤,c语言程序设计基本步骤
  9. PID与MPC控制方法
  10. js获取当前卫星云图url并播放
  11. 简单的MCU加密方法,防破解、防抄袭、防山寨
  12. 详解原生JS实现走马灯轮播图
  13. java 车牌号归属地_本地化JavaAnpr用于本地的车牌
  14. 设置U盘盘符为自定义图片
  15. 德州学院计算机专业怎样,2017德州学院各专业录取分数线
  16. 代码优雅之路-如何优雅的去除冗杂的if-else语句
  17. grafana-汉化方法
  18. 安卓开发学习日记第三天_新手怪button_莫韵乐的欢乐笔记
  19. Kubernetes 应用包管理器 Helm 对应用进行管理
  20. C++核心准则CP.26:不要分离线程

热门文章

  1. Java各种视频教学(转)
  2. r语言计算 java gUI_Windows64位系统用R软件运行rjava程序计算MIC值,以及一些问题...
  3. 逻辑思维强的人适合学计算机不,逻辑思维强的人适合做什么工作?
  4. Mac 截取一个视频中部分片段(命令行方法)
  5. 前端面试—html语义化
  6. 老男孩mysql高级专业dba实战课程_老男孩MySQL高级专业DBA实战课程/高级运维DBA课程/MySQL视频教程下载...
  7. 整理控|四象限系列电脑桌面壁纸分享一波
  8. 名编辑电子杂志大师教程 | 名编辑电子杂志大师如何编辑文本文字?
  9. 贪婪的送礼者Greedy Gift Givers [USACO 1.2]
  10. 页面布局的几种宽度设置方式—html