日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux c编译库路径,【一点一点学Linux C】交叉编译时候如何配置连接库的搜索路径...

發(fā)布時(shí)間:2023/12/10 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux c编译库路径,【一点一点学Linux C】交叉编译时候如何配置连接库的搜索路径... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

交叉編譯的時(shí)候不能使用本地(i686機(jī)器,即PC機(jī)器,研發(fā)機(jī)器)機(jī)器上的庫,但是在做編譯鏈接的時(shí)候默認(rèn)的是使用本地庫,即/usr/lib,/lib兩個(gè)目錄。因此,在交叉編譯的時(shí)候,要采取一些方法使得在編譯鏈接的時(shí)候找到需要的庫。

首先,要知道:編譯的時(shí)候只需要頭文檔,真正實(shí)際的庫文檔在鏈接的時(shí)候用到。 (這是我的理解,假如有不對的地方,敬請網(wǎng)上各位大俠指教) 然后,講講如何在交叉編譯鏈接的時(shí)候找到需要的庫。

(1)、交叉編譯時(shí)候直接使用-L和-I參數(shù)指定搜索非標(biāo)準(zhǔn)的庫文檔和頭文檔的路徑。例如:

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變量》這篇文章。

通過環(huán)境變量LD_LIBRARY_PATH指定動(dòng)態(tài)庫搜索路徑(!)。

通過設(shè)定環(huán)境變量LD_LIBRARY_PATH也可以指定動(dòng)態(tài)庫搜索路徑。當(dāng)通過該環(huán)境變量指定多個(gè)動(dòng)態(tài)庫搜索路徑時(shí),路徑之間用冒號\":\"分隔。

不過LD_LIBRARY_PATH的設(shè)定作用是全局的,過多的使用可能會(huì)影響到其他應(yīng)用程序的運(yùn)行,所以多用在調(diào)試。(LD_LIBRARY_PATH的缺陷和使用準(zhǔn)則,可以參考《Why LD_LIBRARY_PATH is bad》 )。通常情況下推薦還是使用gcc的-R或-rpath選項(xiàng)來在編譯時(shí)就指定庫的查找路徑,并且該庫的路徑信息保存在可執(zhí)行文件中,運(yùn)行時(shí)它會(huì)直接到該路 徑查找?guī)?#xff0c;避免了使用LD_LIBRARY_PATH環(huán)境變量查找。

(4)、交叉編譯時(shí)使用軟件的configure參數(shù)。例如我編譯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參數(shù),這樣一來,我就不用去修改每個(gè)Makefile里-L和-I參數(shù)了,也不用再去配置LD_LIBRARY_PATH或改寫ld.so.conf文檔了。Linux下動(dòng)態(tài)庫使用小結(jié)

1. 靜態(tài)庫和動(dòng)態(tài)庫的基本概念

靜態(tài)庫,是在可執(zhí)行程序連接時(shí)就已經(jīng)加入到執(zhí)行碼中,在物理上成為執(zhí)行程序的一部分;使用靜態(tài)庫編譯的程序運(yùn)行時(shí)無需該庫文件支持,哪里都可以用,但是生成的可執(zhí)行文件較大。動(dòng)態(tài)庫,是在可執(zhí)行程序啟動(dòng)時(shí)加載到執(zhí)行程序中,可以被多個(gè)可執(zhí)行程序共享使用。使用動(dòng)態(tài)庫編譯生成的程序相對較小,但運(yùn)行時(shí)需要庫文件支持,如果機(jī)器里沒有這些庫文件就不能運(yùn)行。

2. 如何使用動(dòng)態(tài)庫

如何程序在連接時(shí)使用了共享庫,就必須在運(yùn)行的時(shí)候能夠找到共享庫的位置。linux的可執(zhí)行程序在執(zhí)行的時(shí)候默認(rèn)是先搜索/lib和/usr/lib這兩個(gè)目錄,然后按照/etc/ld.so.conf里面的配置搜索絕對路徑。同時(shí),Linux也提供了環(huán)境變量LD_LIBRARY_PATH供用戶選擇使用,用戶可以通過設(shè)定它來查找除默認(rèn)路徑之外的其他路徑,如查找/work/lib路徑,你可以在/etc/rc.d/rc.local或其他系統(tǒng)啟動(dòng)后即可執(zhí)行到的腳本添加如下語句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路徑優(yōu)先于系統(tǒng)默認(rèn)路徑之前查找(詳細(xì)參考《使用LD_LIBRARY_PATH》)。

不過LD_LIBRARY_PATH的設(shè)定作用是全局的,過多的使用可能會(huì)影響到其他應(yīng)用程序的運(yùn)行,所以多用在調(diào)試。(LD_LIBRARY_PATH的缺陷和使用準(zhǔn)則,可以參考《Why LD_LIBRARY_PATH is bad》 )。通常情況下推薦還是使用gcc的-R或-rpath選項(xiàng)來在編譯時(shí)就指定庫的查找路徑,并且該庫的路徑信息保存在可執(zhí)行文件中,運(yùn)行時(shí)它會(huì)直接到該路徑查找?guī)?#xff0c;避免了使用LD_LIBRARY_PATH環(huán)境變量查找。

3.庫的鏈接時(shí)路徑和運(yùn)行時(shí)路徑

現(xiàn)代連接器在處理動(dòng)態(tài)庫時(shí)將鏈接時(shí)路徑(Link-time path)和運(yùn)行時(shí)路徑(Run-time path)分開,用戶可以通過-L指定連接時(shí)庫的路徑,通過-R(或-rpath)指定程序運(yùn)行時(shí)庫的路徑,大大提高了庫應(yīng)用的靈活性。比如我們做嵌入式移植時(shí)#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/ -llibz-1.2.3 (work/lib/zlib下是交叉編譯好的zlib庫),將target編譯好后我們只要把zlib庫拷貝到開發(fā)板的系統(tǒng)默認(rèn)路徑下即可。或者通過-rpath(或-R )、LD_LIBRARY_PATH指定查找路徑。

小問題:

1.編譯時(shí)的-L選項(xiàng)是否影響LD_LIBRARY_PATH的值?

舉一個(gè)實(shí)例:

當(dāng)前文件夾結(jié)構(gòu)如下:

test.c tools/

tool下有tool.c tool.h my_err.h 以及由此生成的libtool.so

tool下編譯生成庫文件

gcc -Wall -g -shared -o tool.so tool.c

在當(dāng)前文件夾引用:

gcc -Wall -g –o test.c -Ltools -ltool

編譯不報(bào)錯(cuò),但是運(yùn)行加載的時(shí)候就出現(xiàn)cannot open shared object file。

如果將該庫文件拷貝到/usr/lib下就沒有錯(cuò)誤,正常運(yùn)行。

說明編譯時(shí)的-L選項(xiàng)并不影響環(huán)境變量LD_LIBRARY_PATH,-L只是指定了程序編譯連接時(shí)庫的路徑,并不影響程序執(zhí)行時(shí)庫的路徑,系統(tǒng)還是會(huì)到默認(rèn)路徑下查找該程序所需要的庫。

原文

總結(jié)

以上是生活随笔為你收集整理的Linux c编译库路径,【一点一点学Linux C】交叉编译时候如何配置连接库的搜索路径...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩Av无码精品 | 日韩中文字幕视频在线观看 | 欧美视频在线看 | 亲嘴扒胸摸屁股免费视频日本网站 | 天堂资源中文在线 | 久久精品99北条麻妃 | 日本免费一区二区在线 | 午夜成人免费电影 | 欧洲在线视频 | 国产女人18水真多毛片18精品 | 日韩视频中文字幕 | 成年网站免费在线观看 | av中文字幕亚洲 | 日本成片网 | 岳乳丰满一区二区三区 | 色校园| 在线看黄色网址 | 希岛婚前侵犯中文字幕在线 | 成人午夜视频免费看 | 国产地址 | 精品一区二区三区免费观看 | 一本一道无码中文字幕精品热 | 亚洲黄一区 | 香蕉久久a毛片 | 国产真实自拍 | 北条麻妃av在线 | 最新在线中文字幕 | 精品一区二区三区视频 | 欧美少妇诱惑 | 中文字幕资源站 | 亚洲国产精品成人无久久精品 | 波多野结衣亚洲天堂 | www.色香蕉 | 大地资源高清播放在线观看 | 欧美视频免费在线观看 | 成人av在线影院 | 欧美精品久久久久久久免费 | 精品在线播放视频 | 日本精品一区二区三区四区 | 国产精品视频免费播放 | 国产视频第三页 | 久久手机免费视频 | 欧美做受喷浆在线观看 | 日韩欧美a级片 | 拔插拔插华人 | 毛片一区 | 操xxxx| 国产一区二区三区播放 | 毛片a片免费观看 | 国精产品一区一区三区免费视频 | 国产成人一区二区三区影院在线 | 高清av网| 婷婷狠狠操 | 鲁一鲁在线视频 | 99久久精品国产一区色 | 三级影片在线免费观看 | 久久成人在线观看 | 欧美黑丝少妇 | youjizz自拍| 蜜桃av在线看 | 国产性一乱一性一伧一色 | 69xxx中国| 美女诱惑av | 日韩国产欧美一区二区三区 | 爽好多水快深点欧美视频 | 天堂在线精品 | 天天操夜夜撸 | 欧美色精品 | 色妻影院 | 亚州一级 | 色呦呦网站入口 | 久久中文字幕人妻熟av女蜜柚m | 天降女子在线观看 | 国产伦理吴梦梦伦理 | 国产激情自拍视频 | 97自拍网 | 国产一区91精品张津瑜 | av一区二区三区 | 欧美三级网 | 青娱乐自拍视频 | 黄视频免费在线观看 | 一区二区三区黄 | 青青在线观看视频 | 打开免费观看视频在线播放 | 91天天干 | 九九在线观看视频 | 麻豆成人入口 | 自拍偷拍视频在线观看 | 一个综合色 | 精国产品一区二区三区a片 国产精品第一 | 99视频导航 | 激情午夜网 | 男生和女生一起搞鸡 | 少妇欧美激情一区二区三区 | 黄色片a| 亚洲不卡在线观看 | 免费高清欧美大片在线观看 | 日本手机看片 | 国产人免费人成免费视频 |