一个简单的inline函数
inline void swap(char *x, char *y){
char t = *x; *x=*y; *y=t;}
编译的时候报错
gcc --std=c11 -Wall -c -o permutation.o permutation.c
gcc permutation.o -lgmp -o permutation
permutation.o:permutation.c:(.text+0x92):对‘swap’未定义的引用
permutation.o:permutation.c:(.text+0x92): 截断重寻址至相符: R_X86_64_PC32 针对未定义的符号 swap
permutation.o:permutation.c:(.text+0xcb):对‘swap’未定义的引用
permutation.o:permutation.c:(.text+0xcb): 截断重寻址至相符: R_X86_64_PC32 针对未定义的符号 swap
collect2: 错误:ld 返回 1
make: *** [<内置>:permutation] 错误 1
# 编译器版本
$ gcc --version
gcc (GCC) 9.1.0
Copyright © 2019 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
解决办法
方法1. 开启 -O 优化
gcc -O -c -o permutation.o permutation.c
gcc permutation.o -lgmp -o permutation
方法2. 添加非inline的原型声明