程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> linux-關於Linux靜態庫的問題

linux-關於Linux靜態庫的問題

編輯:編程解疑
關於Linux靜態庫的問題

這幾天在寫Linux的靜態庫的時候遇到一個問題,就是為什麼組成靜態庫的源文件之間的函數可以相互調用,而且不用通過任何頭文件的輔助和聲明?

具體情況如下,我寫了一個簡單的案例
TestLib1.c:
#include
#include

void A()
{
printf("this is function a\n");
B();//這個函數文件在TestLib2.c中
}

TestLib2.c:
#include
#include

void B()
{
printf("This is function B\n");
}

TestLib1.c和TestLib2.c共同形成libtest.給主函數文件Test.c使用
Test.c:
#include
#include

int main()
{
printf("This is Test main\n");
A();
}
可以運行成功,請問這是為什麼在LibTest1.c中調用LibTest2.c的B函數可以不用頭文件輔助或是extern聲明?請大神講解一下

最佳回答:


因為C編譯器編譯分編譯和鏈接兩部分,在編譯的時候,需要通過extern的定義獲知當前c文件所調用的外部函數是如何聲明的。但在編譯成中間文件後,它會吧這些外部引用符號自動紀錄到中間文件中。
而所謂的庫文件,可以抽象理解成是中間文件的集合。編譯器在鏈接時候只根據當前中間文件所需的函數名來尋找外部中間文件或庫中對應的函數實現,並將它們關聯在一起。
所以這時候,無論函數長什麼樣,和鏈接程序已經沒有關系了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved