![](/img/trans.png)
[英]The libc function "system" does not get linked in the executable produced by GCC even after using the static flag
[英]Does every library used to build a program need to be linked using a flag in gcc?
我是C語言的新手。我正在Ubuntu 12.04中進行編碼。 我剛剛面對了這個問題 ,並使用為該問題提供的解決方案(在using -lncurses flag while compiling with gcc
)解決了該問題。
我的問題是
我們是否必須將程序中使用的每個庫都明確地標記為gcc的標志,以便它可以鏈接到目標文件?
如果必須這樣做,為什么要在程序的頂部寫入頭文件,例如#include<stdio.h> or
#include`?
我們是否必須保持一些順序,以便在gcc
命令中寫入該庫標志。 因為在這個答案中有一個陳述說順序重要嗎? 什么決定標志的順序?
提前致謝。
通常是的。 一些庫使用名為pkg-config
的腳本來工作,該腳本告訴您如何鏈接。 如pkg-config --libs libzip
將給予連接標志libzip
,這是-lzip -lz
。
標頭包含函數的聲明,數據結構的定義以及與編譯器相關的其他內容,但不包含鏈接 程序的信息。 這是一個歷史性的事故。 它在Plan 9 C編譯器中已得到修復,我相信在Microsoft的編譯器中也可以,但在常見的Unix / Linux編譯器中卻沒有。
請注意,標頭和庫不是一一對應的。 例如,某些庫是“僅標頭的”,而包括libc在內的某些庫具有許多標頭。 在其他情況下,可以使用庫的多個版本(通用版本,調試版本,針對某些處理器的優化版本等),所有這些都具有相同的標頭。
我相信這取決於GCC版本,但我從未弄清楚哪些版本需要嚴格訂購,哪些不需要。 安全的選擇是以反向依賴關系順序與庫鏈接; 因此,如果libfoo
使用libbar
,鏈接與libfoo
第一,然后libbar
。 前面提到的pkg-config
以及支持它的庫也要注意這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.