0.学习链接
Linux环境下gcc编译链接库-lz -lrt -lm -lc都是什么库?
1.gcc常连接的动态库
-lz 是link libz,链接压缩库(Z)
-lrt 实时库(real time):shm_open系列
-lm 是link libm,链接数学库(math)
-lc 是link libc,链接标准C库(C lib)
-ldl 是显式加载动态库的动态函数库,如果你的程序中使用dlopen、dlsym、dlclose、dlerror显示加载动态库,需要设置链接选项-ldl
-lnsl 需要链接libnsl.so, libnsl.so是C网络服务的库
-lclntsh 需要链接libclntsh.so,是orcale客户端编译的时候需要用到的一个库,可以扒一扒
-lpthread 线程库
-lsnmp++ 网络管理库
-locci 是指Oracle C++ Call Interface对应的动态库,(OCCI)驱动程序
-lCOS4
-lCOSDynamic4
-lomniCodeSets4
-lomniDynamic4
-lomniORB4
-lomnithread
libltdl.so 这个库是做什么用的?
libltdl.so ,这个库,我在看一个开源的源码是,看见调用它了。不知道这个是干什么用的?
网上找了找,和libtool有关,是调用系统库用的函数(也不是太确定)。但是还是不太明白。
它和其它的区别是什么?
2.动态库编译错误的记录
2.1 找不到libclntsh.so的一个记录
好记性不如烂笔头,之前在32位系统下解决了的问题,这次在64位系统下又碰到了,又是重来一遍的痛苦,
这次记下省的以后再为此头疼。
提示找不到libclntsh.so的动态库,从网上搜了好多,都试过了,不是很灵,看到网上有这样说的,
将$ORACLE_HOME/product/版本号/lib的路径加入到/etc/ld.so.conf,然后用root权限进行ldconfig,我这样操作了,还是提示找不到。
后来我看他说:
这个库是oracle的一个库 并不是放在/usr/lib下 所以gcc找不到路径
我明白了,是gcc找不到,于是我在/usr/lib下做了软连接 ln -s $ORACLE_HOME/lib/libclntsh.so libclntsh.so
这样你再找不到我可真无语了,果然,编译通过。
之前还有提示
Failed assertion [PGE Code=90105] 问题
是因为用户组不是dba组的原因,把用户所在的主用户组改为dba就OK了.
=============================================
其实编译的时候指定库的路径应该也可以吧.
3.运行时找不到库,ldd发现有库没有链接到,是因为在/etc/profile里面没有加在LD_LIBRART_PATH中,这个必须在环境变量中能链接到才可以正确地被链接到文件中,还要注意用户的环境变量和权限的问题。