gcc 內聯函式編譯報錯

2021-10-23 19:46:38 字數 1104 閱讀 2173

一段很簡單的**,使用了內聯函式,編譯竟然報錯。在這裡記一下加深記憶。

#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:(.text+0x2e): undefined reference to `sum'

collect2.exe: error: ld returned 1 exit status

我用的是mingw的64位gcc

$ which gcc

/mingw32/bin/gcc

$ gcc --version

gcc.exe (rev3, built by msys2 project) 9.1.0

this is free software; see the source for copying conditions. there is no

warranty; not even for merchantability or fitness for a particular purpose.

在論壇上找到乙個帖子,加上-o之後果然行了

$ gcc -o test.c -o test

$ ./test.exe

sum(3,5) is 8

2)修改**

另一種說法是inline關鍵字必須放在定義中,原型宣告中不能使用inline,給內聯函式單獨提供了乙個不帶inline的原型宣告,編譯就能通過了。但是總覺得這樣太羅嗦了。

#include #include int sum(int a, int b);

inline int sum(int a, int b)

$ gcc test.c -o test

$ ./test.exe

sum(3,5) is 8

gcc 內聯函式

今天在乙個高版本的gcc aarch64架構上面重新編譯x86架構的乙個軟體包的時候,發現乙個神奇的錯誤 即是對內聯函式的呼叫未定義 具體函式有點複雜,我寫了乙個簡單的例子 include inline void print inline void print int main 然後編譯的時候報 t...

GCC內聯彙編

有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助 關鍵字!來看下面的例子 asm volatile hlt ...

gcc內聯彙編

有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 a volatile hlt a 表...