簡體   English   中英

用於構建程序的每個庫是否都需要使用gcc中的標志進行鏈接?

[英]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 )解決了該問題。

我的問題是

  1. 我們是否必須將程序中使用的每個庫都明確地標記為gcc的標志,以便它可以鏈接到目標文件?

  2. 如果必須這樣做,為什么要在程序的頂部寫入頭文件,例如#include<stdio.h> or #include`?

  3. 我們是否必須保持一些順序,以便在gcc命令中寫入該庫標志。 因為在這個答案中有一個陳述說順序重要嗎? 什么決定標志的順序?

提前致謝。

  1. 通常是的。 一些庫使用名為pkg-config的腳本來工作,該腳本告訴您如何鏈接。 pkg-config --libs libzip將給予連接標志libzip ,這是-lzip -lz

  2. 標頭包含函數的聲明,數據結構的定義以及與編譯器相關的其他內容,但不包含鏈接 程序的信息。 這是一個歷史性的事故。 它在Plan 9 C編譯器中已得到修復,我相信在Microsoft的編譯器中也可以,但在常見的Unix / Linux編譯器中卻沒有。

    請注意,標頭和庫不是一一對應的。 例如,某些庫是“僅標頭的”,而包括libc在內的某些庫具有許多標頭。 在其他情況下,可以使用庫的多個版本(通用版本,調試版本,針對某些處理器的優化版本等),所有這些都具有相同的標頭。

  3. 我相信這取決於GCC版本,但我從未弄清楚哪些版本需要嚴格訂購,哪些不需要。 安全的選擇是以反向依賴關系順序與庫鏈接; 因此,如果libfoo使用libbar ,鏈接與libfoo第一,然后libbar 前面提到的pkg-config以及支持它的庫也要注意這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM