gcc -l參數和-L參數

-l參數就是用來指定程序要鏈接的庫,-l參數緊接著就是庫名,那么庫名跟真正的庫文件名有什么關系呢?就拿數學庫來說,他的庫名是m,他的庫文件名是libm.so,很容易看出,把庫文件名的頭lib和尾.so去掉就是庫名了

?

好了現在我們知道怎么得到庫名,當我們自已要用到一個第三方提供的庫名字libtest.so,那么我們只要把libtest.so拷貝到/usr/lib里,編譯時加上-ltest參數,我們就能用上libtest.so庫了(當然要用libtest.so庫里的函數,我們還需要與libtest.so配套的頭文件)

?

放在/lib/usr/lib/usr/local/lib里的庫直接用-l參數就能鏈接了,但如果庫文件沒放在這三個目錄里,而是放在其他目錄里,這時我們只用-l參數的話,鏈接還是會出錯,出錯信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是鏈接程序ld在那3個目錄里找不到libxxx.so,這時另外一個參數-L就派上用場了,比如常用的X11的庫,它在/usr/X11R6/lib目錄下,我們編譯時就要用-L/usr/X11R6/lib -lX11參數,-L參數跟著的是庫文件所在的目錄名。再比如我們把libtest.so放在/aaa/bbb/ccc目錄下,那鏈接參數就是-L/aaa/bbb/ccc -ltest

?

另外,大部分libxxxx.so只是一個鏈接,以RH9為例,比如libm.so它鏈接到/lib/libm.so.x/lib/libm.so.6又鏈接到/lib/libm-2.3.2.so

?

如果沒有這樣的鏈接,還是會出錯,因為ld只會找libxxxx.so,所以如果你要用到xxxx庫,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一個鏈接就可以了ln -s libxxxx-x.x.x.so libxxxx.so

?

手工來寫鏈接參數總是很麻煩的,還好很多庫開發包提供了生成鏈接參數的程序,名字一般叫xxxx-config,一般放在/usr/bin目錄下,比如

?

gtk1.2的鏈接參數生成程序是gtk-config,執行gtk-config --libs就能得到以下輸出"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic

?

-lgmodule -lglib -ldl -lXi -lXext -lX11 -lm",這就是編譯一個gtk1.2程序所需的gtk鏈接參數,xxx-config除了--libs參數外還有一個參數是--cflags用來生成頭文件包含目錄的,也就是-I參數,在下面我們將會講到。你可以試試執行gtk-config --libs --cflags,看看輸出結果

?

現在的問題就是怎樣用這些輸出結果了,最笨的方法就是復制粘貼或者照抄,聰明的辦法是在編譯命令行里加入這個`xxxx-config --libs --cflags`,比如編譯一個gtk程序:gcc gtktest.c `gtk-config --libs --cflags`這樣就差不多了。注意`不是單引號,而是1鍵左邊那個鍵。

?

5-include-I參數

?

-include用來包含頭文件,但一般情況下包含頭文件都在源碼里用#include xxxxxx實現,-include參數很少用。-I參數是用來指定頭文件目錄,/usr/include目錄一般是不用指定的,gcc知道去那里找,但是如果頭文件不在/usr/include里我們就要用-I參數指定了,比如頭文件放在/myinclude目錄里,那編譯命令行就要加上-I/myinclude參數了,如果不加你會得到一個"xxxx.h: No such file or directory"的錯誤。-I參數可以用相對路徑,比如頭文件在當前目錄,可以用-I.來指定。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383488.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383488.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383488.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【jenkins】jenkins CI/CD搭建基本過程

1.安裝 (1)安裝java (2)安裝jenkins (3)修改jenkins用戶名密碼配置 (4)啟動jenkins 2. 插件安裝換源 (1)插件高級選項換地址 (2)修改…

apt-get常用命令

一,什么的是apt-get 高級包裝工具(英語:Advanced Packaging Tools,簡稱:APT)是Debian及其衍生發行版(如:ubuntu)的軟件包管理器。APT可以自動下載,配置,安裝二…

【jenkins】jenkins build項目的三種方式

jenkins致力于CI/CD, 更改代碼只需要在gitlab push之后,jenkins重新build便可以在tomcat上實現更新部署。 以下為三種構建方式: 1.freestyle project 0. 安裝插件Deploy to container, 并安裝憑證 github連接創建item設置build和post-build …

apt-get 使用詳解

[舉例] 目前常用的 *更新本機中的數據庫緩存&#xff1a; sudo apt-get update *查找包含部分關鍵字的軟件包&#xff1a; sudo apt-cache search <你要查找的name> *安裝指定的軟件&#xff1a; sudo apt-get install <你要安裝的軟件包> *下載軟件包源代碼&…

Buildroot用戶指南

第一章 關于Buildroot Buildroot是一個包含Makefile和修補程序【patch】的集合&#xff0c;這個集合可以使你很容易的為你的目標構建交叉工具鏈【cross-compilationtoolchain】&#xff0c;根文件系統【root filesystem】以及Linux內核映像【kernelimage】。Buildroot可…

【jenkins】jenkins按分支build和email

jenkins按分支build git上傳分支到遠程jenkins打開參數設置更改SCM pipeline代碼&#xff0c;加入branch讀取項 build完發送email 1.安裝插件email extension templates 2.開通發件郵箱smtp服務&#xff0c;配置發件郵箱jenkins&#xff0c;發送測試郵件 3. 項目根目錄添加em…

【c】‘聲明’和malloc不要重復開辟空間

聲明&#xff1a;在內存里開辟一塊連續空間&#xff0c;屬于棧。 malloc&#xff1a;在內存里開辟一塊不連續空間&#xff0c;屬于堆。 //linkedlist.h文件 typedef struct Linkedlist {int data;struct Linkedlist* next&#xff1b; }lnode;//linkedlist.c 比如里邊已經定義…

Buildroot文章翻譯

OpenWRT文章翻譯之&#xff08;一&#xff09;----OpenWRT Buildroot簡介 原文地址&#xff1a;http://wiki.openwrt.org/about/toolchain Buildroot簡介 話說OpenWRT Buildroot 之前&#xff0c;先說一下Buildroot是什么東西吧。Buildroot實際上是一個編譯的腳本&#xff0c…

Buildroot簡介

Buildroot的用法和文檔由Thomas Petazzoni提供&#xff0c;文稿由Karsten Kruse、Ned Ludd、Martin Herren等整理。 最后修改時間&#xff1a;2007-09-19 02:08:10 -0700 (Wed, 19 Sep 2007) l 關于Buildroot l 獲取Buildroot l 使用Buildroot l 定制目標文…

【kali】文件尺寸不符,您使用的鏡像正在同步中

換源時候報錯&#xff1a; vim /etc/apt/sources.list 進去后剛開始添加的阿里源 deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib執行后報錯 文件尺寸不符&#xff0c…

【kali】kali環境下安裝dvwa

STEP1&#xff1a;從github下載dvwa git clone https://github.com/ethicalhack3r/DVWA Q&#xff1a;我要自己安裝git嗎&#xff1f; A&#xff1a;kali不用啦&#xff0c;一般都自帶有&#xff0c;但是普通的ubuntu和debian上是沒有的哦。 Q&#xff1a;可以換個github網址…

Linux下的C編程實戰之文件系統編程

在Linux平臺下對文件編程可以使用兩類函數&#xff1a;&#xff08;1&#xff09;Linux操作系統文件API&#xff1b;&#xff08;2&#xff09;C語言I/O庫函數。前者依賴于Linux系統調用&#xff0c;后者實際上與操作系統是獨立的&#xff0c;因為在任何操作系統下&#xff0c;…

【kali】kali設置burpsuite抓包dvwa

kali自帶burpsuite 配置代理 burpsuite是通過代理來抓包dvwa的 burpsuite&#xff1a;proxy—> options 里邊監聽的應該是127.0.0.1:8080 &#xff08;端口ip如果撞車了都可以自己改&#xff09; 火狐&#xff1a; preferences–>最下邊的network settings點擊settings —…

fopen函數簡介

函數簡介 函數功能&#xff1a;打開一個文件 函數原型&#xff1a;FILE * fopen(const char * path,const char * mode); 相關函數&#xff1a;open&#xff0c;fclose&#xff0c;fopen_s[1]&#xff0c;_wfopen 所需庫&#xff1a;<stdio.h> 返回值&#xff1a;文件順利…

【kali】kali換了root權限后無法打開firefox瀏覽器

從普通權限換成root權限后發現火狐進不去鳥&#xff01;&#xff01; 終端報錯&#xff1a; Running firefox as root in a regular user’s sessin is not supported.($HOME is /home/miehahaha which is owned by uid 1000) 分析&#xff1a; 是的&#xff0c;原來普通權限m…

【win10】局域網內兩臺win10共享文件夾

https://jingyan.baidu.com/article/93f9803f3e9788e0e46f55c8.html

CentOS 7關閉firewalld啟用iptables

在CentOS7中&#xff0c;有很多CentOS 6中的常用服務發生了變化。 其中iptables是其中比較大的一個。防火墻iptables被firewalld取代。 本文將介紹&#xff0c;如果采用systemctl關閉firewalld&#xff0c;開啟iptables。 1.關閉firewalld [roothwcentos70-01 system]# systemc…

wpa_supplicant wifi密碼錯誤檢測

system("/usr/sbin/wpa_supplicant -Dnl80211 -iwlan0 -f /tmp/wpa_log -c/tmp/wpa_supplicant.conf -d -t -B &"); 在/tmp/wpa_log中查看是否有如下的字符串&#xff1a; 1. 針對WPA&#xff0f;WPA2加密方式 //1473218403.305655: wlan0: WPA: 4-Way Handsh…

CentOS 7 安裝nginx

1.安裝pcre pcre-devel yum install pcre pcre-devel -y rpm -qa pcre pcre-devel 2.安裝openssl-devel yum install -y openssl-devel rpm -qa openssl-devel openssl 3.下載nginx cd /home/testuser/mkdir toolscd tools/wget -q http://nginx.org/download/nginx-1.9.9.…

MPEG4與.mp4

流媒體應用中TS和MP4格式分析應該是封包格式。不能簡單理解成MPEG4的簡稱。要詳細解釋這個問題&#xff0c;需要提一下MPEG4和.mp4在概念上的區別。 一般來說&#xff0c;僅提“MPEG4”&#xff0c;是指一種視頻壓縮算法。可以把原始畫面通過數學運算變換成一組二進制數據&…