引用动态库libxxx.so中的func的方法

来源:互联网 发布:android读取串口数据 编辑:程序博客网 时间:2024/06/17 05:55
一种是通过头文件libxxx.h申明,-lxxx来导入symbol进行引用,另外一种是通过dlsym
来查找dll中func symbol,然后进行调用。
通过头文件也就是在Makefile中用-lxxx的方式来引用func时,必须保证随libxxx.so
的更新而更新libxxx.h,否则容易出现的问题就是当头文件中的

数据结构定义发生变化后,而导致引用错误。错误严重时,就是Segmentation fault
。哪怕你只是引用了一个根本没有使用头文件数据结构的func,

也会发生错误。这跟动态加载libxxx.so的机制有关系。
我觉得比较保险的做法是,跟libxxx.so中紧相关的模块,就严格引用libxxx.h/libxxx.
so的方法,这样方便一些。
如果弱相关,只是用了其中某一个func,最好是用dlsym的动态查找加载机制。

if (ret<0)
   printf("open MsgQue %s fail!ret=%d\n",ret);这一句导致的Segmentation fault
惨痛的教训!

原创粉丝点击