1、编译进程文件(可执行文件)时gcc需要去掉-share选项,编译动态库需要加上
2、链接动态库设置:-L/usr/local/lib -ljansson jmnd_admin.so -L表示指定动态库的路径,-l表示以lib开头动态库的名字 jmnd_admin.so可以直接指定动态库,jmnd_admin.so.4也可以
3、执行程序出现以下错误
[root@bcm958804a8046i jmnd]# ./test_client
./test_client: error while loading shared libraries: admin.so: cannot open shared object file: No such file or directory
出现这个情况一般是因为库不存在或库没找到(可能没告诉加载器loader去哪取)
ldd可以查看那些库找不到
有三种解决方式:
1:修改/etc/ld.so.conf中
include /etc/ld.so.conf.d/*.conf
/usr/local/lib/
执行ldconfig ldconfig -p可以查看
这个方法实际在操作的时候无效,有待验证
ldconfig命令的用途, 主要是在默认搜寻目录(b和/usrb)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表
2:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
修改环境变量,实际验证有效
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
如果程序需要的库文件比系统目前存在的库文件版本低,可以做一个链接
3:修改/etc/profile文件
export
MPI_HOME=
/usr/cluster
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/.share
/lib
在终端执行source /etc/profile 使配置文件生效