标准解法:
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库)