gcc编译inline函数报错:未定义的引用

一个简单的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的原型声明

<
  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值