一段很簡單的**,使用了內聯函式,編譯竟然報錯。在這裡記一下加深記憶。
#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 表...