問題:安裝完成sysbench以後,查看sysbench版本號時出現下面問題。這種報錯很常見,mysql
[root@zero01 sysbench]# /usr/local/sysbench/bin/sysbench --version /usr/local/sysbench/bin/sysbench: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
分析:安裝了一個mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,這時須要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存事後ldconfig一下,新的library才能在程序運行時被找到。sql
ldconfig命令的用途主要是在默認搜尋目錄/lib和/usr/lib以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態連接庫(格式如lib*.so*),進而建立出動態裝入程序(ld.so)所需的鏈接和緩存文件。緩存文件默認爲/etc/ld.so.cache,此文件保存已排好序的動態連接庫名字列表,爲了讓動態連接庫爲系統所共享,需運行動態連接庫的管理命令ldconfig,此執行程序存放在/sbin目錄下。緩存
ldconfig一般在系統啓動時運行,而當用戶安裝了一個新的動態連接庫時,就須要手工運行這個命令。spa
ldconfig幾個須要注意的地方:blog
一、往/lib和/usr/lib裏面加東西,是不用修改/etc/ld.so.conf的,可是完了以後要調一下ldconfig,否則這個library會找不到。
二、在上面兩個目錄之外加東西的時候,必定要修改/etc/ld.so.conf,而後再調用ldconfig,否則也會找不到。好比安裝了一個mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面
三、若是想在這兩個目錄之外放lib,可是又不想在/etc/ld.so.conf中加東西(或者是沒有權限加東西)。那也能夠,就是export一個全局變量LD_LIBRARY_PATH,而後運行程序的時候就會去這個目錄中找library。通常來說這只是一種臨時的解決方案,在沒有權限或臨時須要的時候使用。
四、ldconfig作的這些東西都與運行程序時有關,跟編譯時一點關係都沒有。編譯的時候仍是該加-L就得加,不要混淆了。
五、總之,就是無論作了什麼關於library的變更後,最好都ldconfig一下,否則會出現一些意想不到的結果。不會花太多的時間,可是會省不少的事。
六、再有,諸如libdb-4.3.so文件頭中是會含有庫名相關的信息的(即含「libdb-4.3.so」,可用strings命令查看),所以僅經過修改文件名以冒充某已被識別的庫(如libdb-4.8.so)是行不通的。爲此可在編譯庫的Makefile中直接修改配置信息,指定特別的庫名。string
解決方法:
一、查看動態連接庫中是否存在 libmysqlclient.so.20io
[root@zero01 lib]# ldconfig -p| grep mysql libmysqlclient_r.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient_r.so.16 libmysqlclient.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.16
二、不存在建立軟鏈接並刷新動態連接庫編譯
[root@zero01 lib]# ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/ [root@zero01 lib]# ldconfig
三、這時再查看動態連接庫,會發現新建立的文件已在其中class
[root@zero01 lib]# ldconfig -p | grep mysql libmysqlclient_r.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient_r.so.16 libmysqlclient.so.20 (libc6,x86-64) => /usr/lib/libmysqlclient.so.20 libmysqlclient.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.16
四、最後,再次運行,OK變量
[root@zero01 lib]# /usr/local/sysbench/bin/sysbench --version sysbench 1.0