未定义引用'_gettimeofday'时将库embedTLS与LwIP 2.1.0错误集成

时间:2019-12-04 10:03:16

标签: arm cortex-m lwip mbedtls

我尝试将库mbedTLS与LwIP 2.1.0集成。我已经在我的lwipopts.h文件中添加了以下内容

#ifndef LWIP_ALTCP
#define LWIP_ALTCP 1
#endif

#ifndef LWIP_ALTCP_TLS
#define LWIP_ALTCP_TLS 1
#endif

我已经像这样将库添加到我的项目中,并为编译器引用了它们:

enter image description here

我还对mbedtls / include / config.h文件进行了更改,以便不使用Windows或Linux。

我得到了对“ _gettimeofday”的“未定义引用”,在这里我将其范围缩小到唯一定义该位置的地方是在我的arm-gnu工具链中:

#ifdef _COMPILING_NEWLIB
int _EXFUN(_gettimeofday, (struct timeval *__p, void *__tz));
#endif

可能是什么情况?当我关闭LWIP_ALTCP_TLS时,所有内容都会编译文件,但是TLS无法使用。我还需要打开/关闭更多标志吗?

1 个答案:

答案 0 :(得分:1)

RTFM:_gettimeofday()函数是系统调用,使用newlib中的日期和时间函数时,用户必须实现该函数。

最小的实现很简单:

int _gettimeofday (struct timeval *tp, void *tzp){
  tp->tv_sec = unixTimeInSecs;
  tp->tv_usec = 0; 
  return 0;
}

TLS库需要当前时间进行证书检查:SSL证书仅在特定日期范围内有效。