在astersik上要使用mysql数据库的话,需要加载跟mysql相关的3个模块
res_config_mysql.so
app_mysql.so
cdr_mysql.so
但是这个三个模块一直加载不上,自己写了程序用dlopen依然加载不上,用dlerror函数将错误信息打印出来:
file not found。
但是反复检查了路径,没有问题。
用readelf -h检查了动态库,也没有问题,用的是MIPS R3000的指令集。
用objdump -x res_config_mysql.so | grep NEEDED发现它依赖5个库
libmysqlclient.so.16
libcrypt.so.0
libnsl.so.0
libm.so.0
libc.so.0
在文件系统里的lib文件夹下,看了看,发现没有libmysqlclient.so.16,将交叉编译后的mysql库弄到lib下,再加载就可以了。
结论:dlopen在加载动态库时会同时加载它依赖的库文件,如果找不到依赖库就会报file not found。