Linux中error while loading shared libraries错误解决办法 --关于exe是否在运行时夹在动态库的猜想

标准解法:

  1、首先打开/etc/ld.so.conf文件

  2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。

  3、保存后,在命令行终端执行:/sbin/ldconfig -v;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用

 

问题来了:

1 /usr/local/lib在很久以前就已经配置好了 第三方库so a文件都已经安装好了 为什么还是找不到呢

原因:因为没有执行/sbin/ldconfig -v 执行结果事例如下:

/lib/i386-linux-gnu:
    libutil.so.1 -> libutil-2.23.so
    libSegFault.so -> libSegFault.so
    libnss_nis.so.2 -> libnss_nis-2.23.so
    libthread_db.so.1 -> libthread_db-1.0.so
    libnss_dns.so.2 -> libnss_dns-2.23.so
    libz.so.1 -> libz.so.1.2.8
    libcidn.so.1 -> libcidn-2.23.so
    libm.so.6 -> libm-2.23.so
    libcrypt.so.1 -> libcrypt-2.23.so
    libgcc_s.so.1 -> libgcc_s.so.1
    libpcprofile.so -> libpcprofile.so
    libdl.so.2 -> libdl-2.23.so
    libanl.so.1 -> libanl-2.23.so
    libnss_nisplus.so.2 -> libnss_nisplus-2.23.so
    libBrokenLocale.so.1 -> libBrokenLocale-2.23.so
/sbin/ldconfig.real: /lib/i386-linux-gnu/ld-2.23.so is the dynamic linker, ignoring

    ld-linux.so.2 -> ld-2.23.so
    libnss_files.so.2 -> libnss_files-2.23.so
    libnss_compat.so.2 -> libnss_compat-2.23.so
    libnss_hesiod.so.2 -> libnss_hesiod-2.23.so
    libc.so.6 -> libc-2.23.so
    libmemusage.so -> libmemusage.so
    libnsl.so.1 -> libnsl-2.23.so
    libpthread.so.0 -> libpthread-2.23.so
    librt.so.1 -> librt-2.23.so
    libresolv.so.2 -> libresolv-2.23.so
/usr/lib/i386-linux-gnu:
    libstdc++.so.6 -> libstdc++.so.6.0.21
/usr/local/lib:
    libwscodecs.so.1 -> libwscodecs.so.1.1.0
    libavfilter.so.7 -> libavfilter.so.7.16.100
    libwiretap.so.7 -> libwiretap.so.7.0.2
    libpcap.so.1 -> libpcap.so.1.8.1
    libavdevice.so.58 -> libavdevice.so.58.3.100
    libavformat.so.58 -> libavformat.so.58.12.100
    libavutil.so.56 -> libavutil.so.56.14.100
    libswresample.so.3 -> libswresample.so.3.1.100
    libswscale.so.5 -> libswscale.so.5.1.100
    libwireshark.so.10 -> libwireshark.so.10.0.2
    libavcodec.so.58 -> libavcodec.so.58.18.100
    libeXosip2.so.12 -> libeXosip2.so.12.0.0
    libwsutil.so.8 -> libwsutil.so.8.0.0

猜想这个命令估计在系统起来后会自动执行 后来安装的库应该没有完成以上的映射

 

1 一般我们怎么生成exe

g++ -o client main.cpp -leXosip2 -losip2 -losipparser2 -lpthread -lresolv sm.a -I/home/sdt/35114_x86/osip/include -std=c++11

两条警告:

/usr/bin/ld: warning: libosip2.so.12, needed by //usr/local/lib/libeXosip2.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libosipparser2.so.12, needed by //usr/local/lib/libeXosip2.so, not found (try using -rpath or -rpath-link)警告内容eXosip2需要osip2与osipparser2两个动态库 这两个动态库不存在与/usr/local/lib中 那么为什么它不添加静态库呢 因为目录下这些库的静态库都有 这是因为gcc优先加载so

解决办法1:

1 这时候你只要将这两个动态库装到该目录下就可以了

2 将/usr/local/lib中的eXosip2的动态库删除(优先加载动态库 删掉动态库解决问题)

3 直接使用如下命令:g++ -o client main.cpp libeXosip2.a libosip2.a libosipparser2.a -lpthread -lresolv sm.a -I/home/sdt/35114_x86/osip/include -std=c++11(直接在当前目录下添加需要的a库)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值