RT-Thread / rt-thread

RT-Thread is an open source IoT Real-Time Operating System (RTOS).
https://www.rt-thread.io
Apache License 2.0
10.38k stars 4.99k forks source link

添加SQLite数据库后编译出错 #7859

Open asdefwe opened 1 year ago

asdefwe commented 1 year ago

我的环境为RT-ThreadV5.0.0,ENV工具版本为V1.3.5

我在 menuconfig 里面的 RT-Thread Components 下使能了 DFS 和 FAL。

RT-Thread Components → C/C++ and POSIX layer 下使能了C++组件,没有使用C11的多线程函数。

RT-Thread Components → C/C++ and POSIX layer → POSIX (Portable Operating System Interface) layer 下使能了第一个和第二个选项分别是 “Enable POSIX file system and I/O”,“Enable devices as file descriptors”

按教程将SQLite数据库下载完后,编译出错。研究了1个星期完全不明白该从哪里下手,麻烦个位帮帮忙。

报错信息如下:

In file included from F:\Project\rtt-yangtao-lot\rt-thread-5.0.0\components\libc\compilers\common\include/sys/time.h:18,
                 from F:\Project\rtt-yangtao-lot\rt-thread-5.0.0\components\libc\compilers\common\include/sys/select.h:17,
                 from e:\rtt-env\env-windows-v1.3.5\tools\gnu_gcc\arm_gcc\mingw\arm-none-eabi\include\sys\types.h:50,
                 from e:\rtt-env\env-windows-v1.3.5\tools\gnu_gcc\arm_gcc\mingw\arm-none-eabi\include\stdio.h:61,
                 from packages\sqlite-v3.19.3\sqlite3.c:11616:
e:\rtt-env\env-windows-v1.3.5\tools\gnu_gcc\arm_gcc\mingw\arm-none-eabi\include\time.h:56:1: error: unknown type name 'clock_t'; did you mean '_flock_t'?
   56 | clock_t    clock (void);
        | ^~~~~~~
        | _flock_t
In file included from F:\Project\rtt-yangtao-lot\rt-thread-5.0.0\components\libc\compilers\common\include/sys/select.h:17,
                 from e:\rtt-env\env-windows-v1.3.5\tools\gnu_gcc\arm_gcc\mingw\arm-none-eabi\include\sys\types.h:50,
                 from e:\rtt-env\env-windows-v1.3.5\tools\gnu_gcc\arm_gcc\mingw\arm-none-eabi\include\stdio.h:61,
                 from packages\sqlite-v3.19.3\sqlite3.c:11616:
F:\Project\rtt-yangtao-lot\rt-thread-5.0.0\components\libc\compilers\common\include/sys/time.h:56:5: error: unknown type name 'suseconds_t'
   56 |     suseconds_t tv_usec;    /* and microseconds */
        |     ^~~~~~~~~~~
SCZeiDan commented 5 months ago

我也遇到同样的问题,想请问一下这个问题解决了么:

In file included from C:\02Study\RT-Thread\Tools\RT-ThreadStudio\workspace\stm32f429IGTx\rt-thread\components\libc\compilers\common\include/sys/time.h:18:0,
                 from C:\02Study\RT-Thread\Tools\RT-ThreadStudio\workspace\stm32f429IGTx\rt-thread\components\libc\compilers\common\include/sys/select.h:17,
                 from c:\02study\rt-thread\tools\rt-threadstudio\repo\extract\toolchain_support_packages\arm\gnu_tools_for_arm_embedded_processors\6.3.1\arm-none-eabi\include\sys\types.h:68,
                 from c:\02study\rt-thread\tools\rt-threadstudio\repo\extract\toolchain_support_packages\arm\gnu_tools_for_arm_embedded_processors\6.3.1\arm-none-eabi\include\stdio.h:61,
                 from ../packages/sqlite-v3.19.3/sqlite3.c:11616:
c:\02study\rt-thread\tools\rt-threadstudio\repo\extract\toolchain_support_packages\arm\gnu_tools_for_arm_embedded_processors\6.3.1\arm-none-eabi\include\time.h:56:1: error: unknown type name 'clock_t'
 clock_t    _EXFUN(clock,    (void));
 ^~~~~~~
In file included from C:\02Study\RT-Thread\Tools\RT-ThreadStudio\workspace\stm32f429IGTx\rt-thread\components\libc\compilers\common\include/sys/select.h:17:0,
                 from c:\02study\rt-thread\tools\rt-threadstudio\repo\extract\toolchain_support_packages\arm\gnu_tools_for_arm_embedded_processors\6.3.1\arm-none-eabi\include\sys\types.h:68,
                 from c:\02study\rt-thread\tools\rt-threadstudio\repo\extract\toolchain_support_packages\arm\gnu_tools_for_arm_embedded_processors\6.3.1\arm-none-eabi\include\stdio.h:61,
                 from ../packages/sqlite-v3.19.3/sqlite3.c:11616:
C:\02Study\RT-Thread\Tools\RT-ThreadStudio\workspace\stm32f429IGTx\rt-thread\components\libc\compilers\common\include/sys/time.h:81:5: error: unknown type name 'suseconds_t'
     suseconds_t tv_usec;    /* and microseconds */
     ^~~~~~~~~~~
asdefwe commented 4 months ago

这里好像是因为工具链的问题。 RTT使用的工具链找不到这个定义,我翻代码看过能找到这几个定义,但编译时就是不行。 最后我找到最底层的类型定义,重新命名了就能通过了

SCZeiDan commented 4 months ago

这里好像是因为工具链的问题。 RTT使用的工具链找不到这个定义,我翻代码看过能找到这几个定义,但编译时就是不行。 最后我找到最底层的类型定义,重新命名了就能通过了

感谢告知!后续我更改RT-Thread内核版本为v4.1.0之后就能够成功编译了,应该跟你推测的一样是工具链的问题,我最后定位到问题,就先用v4.1.0用着了