青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-167  評論-8  文章-0  trackbacks-0

庫文件在連接(靜態庫和共享庫)和運行(僅限于使用共享庫的程序)時被使用,其搜索路徑是在系統中進行設置的。一般 Linux 系統把 /lib 和 /usr/lib 兩個目錄作為默認的庫搜索路徑,所以使用這兩個目錄中的庫時不需要進行設置搜索路徑即可直接使用。對于處于默認庫搜索路徑之外的庫,需要將庫的位置添加到庫的搜索路徑之中。設置庫文件的搜索路徑有下列兩種方式,可任選其一使用:
在環境變量 LD_LIBRARY_PATH 中指明庫的搜索路徑。
在 /etc/ld.so.conf 文件中添加庫的搜索路徑。
將自己可能存放庫文件的路徑都加入到/etc/ld.so.conf中是明智的選擇
添加方法也極其簡單,將庫文件的絕對路徑直接寫進去就OK了,一行一個。例如:
/usr/X11R6/lib

/usr/local/lib

/opt/lib
        需要注意的是:第二種搜索路徑的設置方式對于程序連接時的庫(包括共享庫和靜態庫)的定位已經足夠了,但是對于使用了共享庫的程序的執行還是不夠的。這是因為為了加快程序執行時對共享庫的定位速度,避免使用搜索路徑查找共享庫的低效率,所以是直接讀取庫列表文件 /etc/ld.so.cache 從中進行搜索的。/etc/ld.so.cache 是一個非文本的數據文件,不能直接編輯,它是根據 /etc/ld.so.conf 中設置的搜索路徑由 /sbin/ldconfig 命令將這些搜索路徑下的共享庫文件集中在一起而生成的(ldconfig 命令要以 root 權限執行)。

        因此,為了保證程序執行時對庫的定位,在 /etc/ld.so.conf 中進行了庫搜索路徑的設置之后,還必須要運行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 文件之后才可以。ldconfig ,簡單的說,它的作用就是將/etc/ld.so.conf列出的路徑下的庫文件緩存到/etc/ld.so.cache 以供使用。因此當安裝完一些庫文件,(例如剛安裝好glib),或者修改ld.so.conf增加新的庫路徑后,需要運行一下 /sbin/ldconfig使所有的庫文件都被緩存到ld.so.cache中,如果沒做,即使庫文件明明就在/usr/lib下的,也是不會被使用的,結果編譯過程中抱錯,缺少xxx庫,去查看發現明明就在那放著,搞的想大罵computer蠢豬一個。

        在程序連接時,對于庫文件(靜態庫和共享庫)的搜索路徑,除了上面的設置方式之外,還可以通過 -L 參數顯式指定。因為用 -L 設置的路徑將被優先搜索,所以在連接的時候通常都會以這種方式直接指定要連接的庫的路徑。
前面已經說明過了,庫搜索路徑的設置有兩種方式:

在環境變量 LD_LIBRARY_PATH 中設置

在 /etc/ld.so.conf 文件中設置。

其中,第二種設置方式需要 root 權限,以改變 /etc/ld.so.conf 文件并執行 /sbin/ldconfig 命令。而且,當系統重新啟動后,所有的基于 GTK2 的程序在運行時都將使用新安裝的 GTK+ 庫。不幸的是,由于 GTK+ 版本的改變,這有時會給應用程序帶來兼容性的問題,造成某些程序運行不正常。為了避免出現上面的這些情況,在 GTK+ 及其依賴庫的安裝過程中對于庫的搜索路徑的設置將采用第一種方式進行。這種設置方式不需要 root 權限,設置也簡單:


$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH


可以用下面的命令查看 LD_LIBRAY_PATH 的設置內容:


$ echo $LD_LIBRARY_PATH


至此,庫的兩種設置就完成了。

 


交叉編譯時候如何配置連接庫的搜索路徑
交叉編譯的時候不能使用本地(i686機器,即PC機器,研發機器)機器上的庫,但是在做編譯鏈接的時候默認的是使用本地庫,即/usr/lib,/lib兩個目錄。因此,在交叉編譯的時候,要采取一些方法使得在編譯鏈接的時候找到需要的庫。
首先,要知道:編譯的時候只需要頭文檔,真正實際的庫文檔在鏈接的時候用到。 (這是我的理解,假如有不對的地方,敬請網上各位大俠指教) 然后,講講如何在交叉編譯鏈接的時候找到需要的庫。
(1)、交叉編譯時候直接使用-L和-I參數指定搜索非標準的庫文檔和頭文檔的路徑。例如:
arm-linux-gcc test.c -L/usr/local/arm/2.95.3/arm-linux/lib -I/usr/local/arm/2.95.3/arm-linux/include
(2)、使用ld.so.conf文檔,將用到的庫所在文檔目錄添加到此文檔中,然后使用ldconfig命令刷新緩存。
(3)、使用如下命令:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/2.95.3/arm-linux-lib
參見《ld.so.conf 文檔和PKG_CONFIG_PATH變量》這篇文章。
通過環境變量LD_LIBRARY_PATH指定動態庫搜索路徑(!)。
通過設定環境變量LD_LIBRARY_PATH也可以指定動態庫搜索路徑。當通過該環境變量指定多個動態庫搜索路徑時,路徑之間用冒號":"分隔。
不過LD_LIBRARY_PATH的設定作用是全局的,過多的使用可能會影響到其他應用程序的運行,所以多用在調試。(LD_LIBRARY_PATH 的缺陷和使用準則,可以參考《Why LD_LIBRARY_PATH is bad》)。通常情況下推薦還是使用gcc的-R或-rpath選項來在編譯時就指定庫的查找路徑,并且該庫的路徑信息保存在可執行文件中,運行時它會直接到該路徑查找庫,避免了使用LD_LIBRARY_PATH環境變量查找。
(4)、交叉編譯時使用軟件的configure參數。例如我編譯minigui-1.3.3,使用如下配置:
#!/bin/bash
rm -f config.cache config.status
./configure --build=i686-linux --host=arm-linux --target=arm-linux \
CFLAGS=-I/usr/local/arm/2.95.3/arm-linux/include \
LDFLAGS=-L/usr/local/arm/2.95.3/arm-linux/lib \
--prefix=/usr/local/arm/2.95.3/arm-linux \
--enable-lite \
--disable-galqvfb \
--disable-qvfbial \
--disable-vbfsupport \
--disable-ttfsupport \
--disable-type1support \
--disable-imegb2312py \
--enable-extfullgif \
--enable-extskin \
--disable-videoqvfb \
--disable-videoecoslcd
這里我配置了CFLAGS和LDFLAGS參數,這樣一來,我就不用去修改每個Makefile里-L和-I參數了,也不用再去配置LD_LIBRARY_PATH或改寫ld.so.conf文檔了。

Linux下動態庫使用小結
1. 靜態庫和動態庫的基本概念
靜態庫,是在可執行程序連接時就已經加入到執行碼中,在物理上成為執行程序的一部分;使用靜態庫編譯的程序運行時無需該庫文件支持,哪里都可以用,但是生成的可執行文件較大。動態庫,是在可執行程序啟動時加載到執行程序中,可以被多個可執行程序共享使用。使用動態庫編譯生成的程序相對較小,但運行時需要庫文件支持,如果機器里沒有這些庫文件就不能運行。
2. 如何使用動態庫
如何程序在連接時使用了共享庫,就必須在運行的時候能夠找到共享庫的位置。linux的可執行程序在執行的時候默認是先搜索/lib和/usr/lib這兩個目錄,然后按照/etc/ld.so.conf里面的配置搜索絕對路徑。同時,Linux也提供了環境變量LD_LIBRARY_PATH供用戶選擇使用,用戶可以通過設定它來查找除默認路徑之外的其他路徑,如查找/work/lib路徑,你可以在/etc/rc.d/rc.local或其他系統啟動后即可執行到的腳本添加如下語句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路徑優先于系統默認路徑之前查找(詳細參考《使用 LD_LIBRARY_PATH》)。
不過LD_LIBRARY_PATH的設定作用是全局的,過多的使用可能會影響到其他應用程序的運行,所以多用在調試。(LD_LIBRARY_PATH 的缺陷和使用準則,可以參考《Why LD_LIBRARY_PATH is bad》)。通常情況下推薦還是使用gcc的-R或-rpath選項來在編譯時就指定庫的查找路徑,并且該庫的路徑信息保存在可執行文件中,運行時它會直接到該路徑查找庫,避免了使用LD_LIBRARY_PATH環境變量查找。
3.庫的鏈接時路徑和運行時路徑
現代連接器在處理動態庫時將鏈接時路徑(Link-time path)和運行時路徑(Run-time path)分開,用戶可以通過-L指定連接時庫的路徑,通過-R(或-rpath)指定程序運行時庫的路徑,大大提高了庫應用的靈活性。比如我們做嵌入式移植時#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/ -llibz-1.2.3 (work/lib/zlib下是交叉編譯好的zlib庫),將target編譯好后我們只要把zlib庫拷貝到開發板的系統默認路徑下即可。或者通過- rpath(或-R )、LD_LIBRARY_PATH指定查找路徑。
小問題:
1.編譯時的-L選項是否影響LD_LIBRARY_PATH的值?
舉一個實例:
當前文件夾結構如下:
test.c tools/
tool下有tool.c tool.h my_err.h 以及由此生成的libtool.so
tool下編譯生成庫文件
gcc -Wall -g -shared -o tool.so tool.c
在當前文件夾引用:
gcc -Wall -g –o test.c -Ltools -ltool
編譯不報錯,但是運行加載的時候就出現cannot open shared object file。
如果將該庫文件拷貝到/usr/lib下就沒有錯誤,正常運行。
說明編譯時的-L選項并不影響環境變量LD_LIBRARY_PATH,-L只是指定了程序編譯連接時庫的路徑,并不影響程序執行時庫的路徑,系統還是會到默認路徑下查找該程序所需要的庫。

有關動態鏈接庫需要注意的相關事項
1.有關動態鏈接庫需要注意的相關事項。

如果碰到有GTK 的程序中 有 <gtk\gtk.h>

那么需要加入動態鏈接庫的參數

$ gcc test_a.c test_b.c iptbox.c -fPIC -shared -o iptbox.so `pkg-config --cflags --libs gtk+-2.0

生成出來的.so 動態鏈接庫 需要放在usr/lib 目錄下

cp libipt.so /usr/lib

2、在運行AP時出現錯誤,可以使用下列方式來查找問題:

strace ./test

3、查找文件夾下路徑:

find /usr/lib -name libipt.so

4、解壓縮命令:

tar -zxvf 文件名

5、解RPM包的方式:

#rpm -ivh scim-1.4.7.4-1benX.src.rpm

#cd /usr/src/dorado/SPECS

#rpmbuild -bb scim.spec

6、目錄權限打開:

chmod 777 root(目錄名稱)

7、linux 下安裝軟件三步驟:

a.  ./configure

b.  make

c. make install

8、更新庫引用:

ldconfig

9、查找是否有安裝該AP.

# whereis scim-ppenglish

posted on 2009-12-27 16:04 老馬驛站 閱讀(249) 評論(0)  編輯 收藏 引用 所屬分類: linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲成色999久久网站| 久久精品中文字幕一区二区三区| 欧美成黄导航| 樱桃视频在线观看一区| 欧美一级视频精品观看| 久久精品国产亚洲a| 好男人免费精品视频| 久久午夜电影| 欧美黄色一级视频| 亚洲精品免费看| 欧美精品久久99久久在免费线| 亚洲三级观看| 在线综合视频| 国产女主播在线一区二区| 欧美一级一区| 欧美激情一区二区三区| 久久视频在线免费观看| 亚洲国产高潮在线观看| 国产亚洲一级高清| 一区二区三区精品视频| 久久久久高清| 一区二区日韩伦理片| 国产精品三级视频| 美女日韩在线中文字幕| 国产三区二区一区久久| 老司机免费视频一区二区| 亚洲人久久久| 欧美一区二区黄| 亚洲国内欧美| 国产欧美一区二区精品性色 | 亚洲国产三级| 午夜在线视频观看日韩17c| 精品不卡在线| 国产精品乱码妇女bbbb| 久久综合网络一区二区| 亚洲欧美日本国产有色| 亚洲欧洲在线观看| 蜜臀99久久精品久久久久久软件| 亚洲午夜精品久久久久久浪潮| 狠狠网亚洲精品| 国产精品免费看久久久香蕉| 欧美成人午夜激情在线| 欧美在线一级va免费观看| 一区二区三区四区五区精品视频 | 亚洲伦伦在线| 美女主播一区| 久久精品官网| 亚洲欧美精品| 亚洲视频免费在线观看| 亚洲人午夜精品免费| 国模大胆一区二区三区| 国产精品成人一区二区| 欧美精品 国产精品| 久久久精品tv| 欧美一区二区三区免费观看视频| 亚洲麻豆av| 亚洲国产精品va在线看黑人动漫| 国产精品久久久久一区二区三区 | 亚洲精品一区二区三区蜜桃久| 久久久久亚洲综合| 欧美一区久久| 欧美在线观看视频一区二区| 午夜视频在线观看一区二区| 亚洲一区视频在线| 亚洲影音先锋| 午夜精品视频一区| 午夜视频在线观看一区| 欧美中文字幕精品| 国内精品免费午夜毛片| 国产精品视频免费在线观看| 国产精品女主播| 一区二区三区四区在线| 在线一区二区视频| 亚洲制服少妇| 欧美一区二视频| 欧美在线精品一区| 久久久久久网站| 久久亚洲捆绑美女| 欧美大片免费观看| 欧美日韩调教| 国产精品日韩在线播放| 国产亚洲激情视频在线| 韩日精品视频一区| 欧美成人午夜| 欧美日韩国产专区| 国产精品国产三级国产专区53| 国产精品日韩欧美一区二区三区| 国产人成精品一区二区三| 国内精品久久久久影院薰衣草| 亚洲国产成人av| 一区二区三区国产在线| 久久国产高清| 欧美成人激情视频| 亚洲美女av在线播放| 亚洲女同精品视频| 老色批av在线精品| 久久九九精品| 欧美日韩免费观看中文| 国产午夜精品美女毛片视频| 亚洲国产一区二区三区a毛片| 亚洲最快最全在线视频| 久久精品成人一区二区三区蜜臀| 欧美激情成人在线视频| 亚洲伊人第一页| 老司机67194精品线观看| 欧美午夜欧美| 亚洲国产三级在线| 久久国产婷婷国产香蕉| 亚洲欧洲综合另类| 性久久久久久久久| 欧美日韩精品免费观看| 狠狠色噜噜狠狠狠狠色吗综合| 一本色道久久综合狠狠躁篇怎么玩| 欧美在线观看网站| 日韩视频在线观看免费| 另类亚洲自拍| 国际精品欧美精品| 欧美一区二粉嫩精品国产一线天| 亚洲高清自拍| 久久综合国产精品| 国产日韩一区| 香蕉乱码成人久久天堂爱免费| 亚洲国产老妈| 巨乳诱惑日韩免费av| 国产真实乱偷精品视频免| 亚洲欧美乱综合| 夜夜精品视频| 欧美日韩成人一区| 亚洲三级视频| 亚洲高清在线| 久久久久久精| 亚洲在线观看视频| 国产精品高清免费在线观看| 夜夜嗨一区二区三区| 亚洲高清久久| 美女视频网站黄色亚洲| 欧美手机在线| 亚洲一区欧美激情| 亚洲在线观看| 国产欧美一区二区三区在线看蜜臀 | 国产亚洲欧美日韩精品| 欧美一级午夜免费电影| 在线亚洲+欧美+日本专区| 欧美三日本三级三级在线播放| 亚洲日韩欧美视频| 亚洲盗摄视频| 欧美精品一区二区三区在线看午夜| 亚洲国产专区校园欧美| 欧美gay视频| 欧美精品粉嫩高潮一区二区| 日韩视频一区二区三区在线播放| 最新成人在线| 欧美日韩中文字幕综合视频| 亚洲一区在线视频| 亚洲欧美日韩精品综合在线观看| 国产美女精品视频| 老司机午夜精品| 欧美激情一区在线观看| 亚洲午夜伦理| 久久丁香综合五月国产三级网站| 一区免费观看视频| 亚洲激情偷拍| 国产精品久久二区二区| 久久久久久久999精品视频| 久久久99精品免费观看不卡| 亚洲免费福利视频| 亚洲一级黄色| 亚洲电影视频在线| 99热这里只有成人精品国产| 国产精品自拍一区| 免费观看成人www动漫视频| 欧美激情一区二区三区| 性欧美1819sex性高清| 久久青草福利网站| 亚洲深夜福利视频| 小嫩嫩精品导航| av成人福利| 久久精品一本| 亚洲一区二区三区精品视频| 久久都是精品| 亚洲影院色无极综合| 久久免费视频在线观看| 亚洲你懂的在线视频| 蜜桃av噜噜一区| 欧美在线视频免费观看| 欧美连裤袜在线视频| 久久免费国产| 国产精品久久夜| 亚洲高清资源| 1024日韩| 老司机免费视频一区二区| 欧美日韩中文字幕在线| 欧美国产日韩在线| 国产婷婷色一区二区三区在线| 欧美国产日产韩国视频| 国内精品久久久久久久影视蜜臀| 一区二区精品| 一区二区三区四区精品| 欧美不卡视频一区发布| 六十路精品视频|