编译错误整理

1 ‘sizeof’ to incomplete type

error: invalid application of ‘sizeof’ to incomplete type ‘struct sockaddr_in’
memset(&servaddr, 0, sizeof(struct sockaddr_in));
这个错误通常是因为在代码中使用了未完整定义的结构体类型,导致编译器无法确定其大小。在这种情况下,无法使用sizeof运算符来计算结构体的大小。

要解决这个问题,需要包含相应的头文件或在代码中定义完整的结构体类型。例如,在使用sockaddr_in结构体之前,需要在代码中包含<netinet/in.h>头文件。

2 参数转发的错误

/usr/include/c++/9/functional: In substitution of ‘template<class _Functor, class … _Bound_args> template<class _Fn, class _CallArgs, class … _BArgs> using _Res_type_impl = typename std::result_of<_Fn&(std::_Bind<_Functor(_Bound_args …)>::_Mu_type<_BArgs, _CallArgs>&& …)>::type [with _Fn = main()::<lambda(int)>; _CallArgs = _CallArgs; _BArgs = {}; _Functor = main()::<lambda(int)>; _Bound_args = {}]’:
/usr/include/c++/9/functional:447:8: required from ‘struct std::_Bind<main()::<lambda(int)>()>’
多半是因为调用的时候没有传被调用函数的参数进去

3 config文件中的编译开关CONFIG_YKR_EM3XX1X=m 改为 CONFIG_YKR_EM3XX1X=y造成的错误

drivers/input/sensors/em3xx1x/em3xx1x.c:3816:1: error: redefinition of ‘___modver_attr’
MODULE_VERSION(“1.0.2”);
^
./include/linux/module.h:275:41: note: expanded from macro ‘MODULE_VERSION’
static struct module_version_attribute ___modver_attr = {
^
drivers/input/sensors/em3xx1x/em3xx1x.c:3815:1: note: previous definition is here
MODULE_VERSION(DRIVER_VERSION);
^
./include/linux/module.h:275:41: note: expanded from macro ‘MODULE_VERSION’
static struct module_version_attribute ___modver_attr = {
^
1 warning and 1 error generated.
make[5]: *** [scripts/Makefile.build:278: drivers/input/sensors/em3xx1x/em3xx1x.o] Error 1
make[4]: *** [scripts/Makefile.build:544: drivers/input/sensors/em3xx1x] Error 2
make[3]: *** [scripts/Makefile.build:544: drivers/input/sensors] Error 2
make[2]: *** [scripts/Makefile.build:544: drivers/input] Error 2
make[1]: *** [Makefile:1911: drivers] Error 2
make: *** [arch/arm64/Makefile:214: rk3568-evb1-ddr4-v10.img] Error 2

failed to build some targets (9 seconds)

打印的类型错误

hardware/rockchip/sensor/st/LightSensor.cpp:111:22: error: format specifies type ‘long long’ but the argument has type ‘int64_t’ (aka ‘long’) [-Werror,-Wformat]
LOGE(“ns = %lld\n”, ns);
int64_t ns 居然要这样打印 , 加上 (long long)进行强转
LOGE(“ns = %lld\n”, (long long)ns);

无法发起与 ppa.launchpad.net

错误:122 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal InRelease
无法发起与 ppa.launchpad.net:80 (2620:2d:4000:1::3e) 的连接 - connect (101: 网络不可达) 无法连接上 ppa.launchpad.net:80 (185.125.190.52),连接超时 [IP: 185.125.190.52 80]
错误:123 http://ppa.launchpad.net/xmake-io/xmake/ubuntu focal InRelease
无法发起与 ppa.launchpad.net:80 (2620:2d:4000:1::3e) 的连接 - connect (101: 网络不可达) [IP: 185.125.190.52 80]
已下载 57.9 MB,耗时 31秒 (1,877 kB/s)
Can not add an empty (zero-length) key to the cache
参见 https://blog.csdn.net/Cerman/article/details/85949763 , 软件和更新中关掉 http://ppa.launchpad.net 相关的选项
在这里插入图片描述

类型转换错误

char *equal_start;
const char *str;。。。
equal_start = strchr(yk_equal, ‘=’);
error: assigning to ‘char *’ from ‘const char *’ discards qualifiers
equal_start = strchr(str, ‘=’);
需要把 char *equal_start; 改为 const char *equal_start;
这个有点坑,没有想到 strchr的返回类型这里是const类型的。

遗漏分隔符

编译android项目时,偶然碰到Makefile:42: *** 遗漏分隔符 。 停止。
gnu make升级到GNU Make 4.2.1 试试看。这里是因为gnu make 从4.2降级到3.81导致的问题。

持续更新中。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值