今天在乙個高版本的gcc aarch64架構上面重新編譯x86架構的乙個軟體包的時候,發現乙個神奇的錯誤
即是對內聯函式的呼叫未定義
具體函式有點複雜,我寫了乙個簡單的例子
#include
inline void print();
inline void print()
int main()
然後編譯的時候報
/tmp/ccsuop2c.o:在函式『main』中:
main.c:(.text+0x8):對『print』未定義的引用
collect2: 錯誤:ld 返回 1
瞬間感覺重新整理了我的世界觀,後來查閱網上的資料
發現內聯函式的關鍵字inline只能用於函式的定義不能使用者函式的宣告
然後把宣告中的inline給去掉就可以編譯通過了
感覺很神奇,特地記錄下來
最後我用的gcc版本是aarch64 5.3.1的,上面出錯的是在x86 gcc-4.8.1上編譯也沒有報錯。不清楚是架構的原因還是gcc的原因,不過即使通過了,語法也是不規範的
所以程式設計還是要盡量規範著來
參考鏈結
gcc 內聯函式編譯報錯
一段很簡單的 使用了內聯函式,編譯竟然報錯。在這裡記一下加深記憶。include include inline int sum int a,int b int main int argc,char ar 編譯結果 gcc test.c d msys64 tmp cc49osy4.o test.c t...
GCC內聯彙編
有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助 關鍵字!來看下面的例子 asm volatile hlt ...
gcc內聯彙編
有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 a volatile hlt a 表...