1、dlopen 动态库失败原因
①动态库位置没有放对地方,dlopen路径错误(可以打印dlerror()函数)
解决办法:使用正确路径。run time的so路径一般都在环境变量LD_LIBRARY_PATH中,可以获取该环境变量,或者改变export LD_LIBRARY_PATH=`具体路径`
②有不能识别的函数或者标识符,undefine symbol
解决办法:考虑是不是C++调用C语言函数,或者C语言调用C++函数,使用extern "C"。
可以查看该博客:https://blog.csdn.net/lv_Amelia/article/details/79483481
或者用nm -u查看你没有定义的symbol,找到undefine symbol属于哪个so。或者readelf -D查看该so中需要link的别的so。
在makefile中加上需要link的so:gcc -L/xxx路径 -lxxxso名称,路径指定不做要求。
因为build time的路径不影响run time的 路径(LD_LIBRARY_PATH)
③makefile 编写问题
①没有指定 -fPIC 编译选项
②没有指定 -shared 外部程序可以访问这个动态库。