gcc 內聯函式

2021-07-14 23:43:46 字數 571 閱讀 4700

今天在乙個高版本的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 表...