1. Linux下編寫c語言頭文件,編譯時出現「函數未定義」
出現該錯誤的原因為編譯時只變編譯了源文件的一部分,故在鏈接時無法從編譯好的目標代碼中找到print函數,所以出錯。
根據你的源文件結構,個人推薦先單獨編譯源文件為多個object文件,再統一鏈接。
方法如下
gcc-cmain.c#-c參數的作用是讓gcc只編譯,不鏈接
gcc-ctest.c
gcc-omainmain.otest.o#將編譯好的目標代碼鏈接
當然,以上是在gcc為編譯器的前提下執行,如使用clang等其他編譯器,方法類似(clang的調用方法與gcc高度兼容)
2. main()函數未定義是怎麼回事
這類錯誤是編譯器找不到指定的符號定義。它是在連接的時候出現的,有兩種可能:
1、你寫的這個函數只有省名,沒有定義。
2、這個函數是動態連接庫導出的函數,而你沒有連接它的lib庫文件可以用「#pragma comment(lib, "那個庫.lib")」編譯命令或設置VC的lib文件路徑。
仔細查看代碼是構建了main函數的,但是如下代碼:(紅框位置)
(2)函數未定義但是能編譯運行擴展閱讀:
C++函數分類:(main()函數是可執行程序的入口函數)
一、從用戶使用的角度看,函數有兩種:
1、標准函數,即庫函數。這是由系統提供的。
2、用戶自定義的函數。可以解決用戶的專門需要。
二、從函數的形式看,函數分兩類:
1、無參函數。printstar和print_message就是無參函數。在調用無參函數時,主調函數並不將數據傳送給被調用函數,一般用來執行指定的一組操作。
2、有參函數。在調用函數時,在主調函數和被調用函數之間有數據傳遞。也就是說,主調函數可以將數據傳遞給被調用函數使用,被調用函數中的數據也可以帶回來供主調函數使用。