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 使配置文件生效

 
posted on 2021-10-22 16:44  莱芜梆子  阅读(717)  评论(1编辑  收藏  举报