main函數應該寫成int main(),妳寫了mian。
相關的庫文件(。a/。所以)在鏈接時丟失。
這裏只舉壹個靜態庫的例子,假設源代碼如下。
將test.c編譯成靜態庫(。a)先歸檔。
gcc測試
ar -rc測試
此時,我們得到了test.a文件。我們開始編譯main.c
gcc -c主網站
這時候main.o文件就生成了,然後我們通過下面的命令鏈接,希望得到可執行的程序。
gcc -o main main
您會發現編譯器報告了壹個錯誤:
/tmp/ccCPA13l.o:在函數“main”中:
main.c:(。text+0x7):對“test”的未定義引用
集合2: ld返回1退出狀態
根本原因是找不到test()函數的實現文件。因為test()函數是在靜態庫test.a中實現的,所以後面鏈接時需要添加庫test.a,鏈接命令可以修改為如下形式。
gcc -o main主。/test.a?//註意:。/是的,給出了test.a的路徑。
擴展:同樣,為了把問題說清楚,我們把上面代碼的編譯環節分開了。如果希望壹次性生成壹個可執行程序,可以在main.c和test.a上執行以下命令
gcc -o main main。/test.a?//同樣,如果不添加test.a,會得到壹個錯誤。