为什么 MinGW gcc 8.2.0 `-std=c11` 不支持 `timespec_get()`?

问题描述 投票:0回答:1

参考 2011 年 4 月 12 日发布的 ISO/IEC 9899:201x N1570 委员会草案编程语言 - C,应该有一个函数

timespec_get()
(参见 7.27.2.5)。

但是 MinGW gcc 版本 8.2.0 在使用

warning: implicit declaration of function 'timespec_get'
编译以下代码片段时返回
error: 'TIME_UTC' undeclared
gcc -std=c11 snippet.c
:

#include <time.h>

int main() {
   struct timespec tstart;
   timespec_get(&tstart, TIME_UTC);
   return 0;
}

这是为什么?

c mingw iso c11
1个回答
0
投票

除了

-std=c11
之外,您还应该为编译器使用
-D_UCRT
选项,为链接器使用
-lucrt
选项。 有有效的 CMakeLists.txt 和 cmake 调用

$ cat CMakeLists.txt 
cmake_minimum_required (VERSION 3.10)
project(timespec_get)

set(EXE_NAME test)
set(MAIN_SOURCES 
    ${PROJECT_SOURCE_DIR}/src/test.c
)

add_executable(${EXE_NAME} ${MAIN_SOURCES})
if (${MINGW})
    set(CMAKE_C_FLAGS "-W -Wall -Wextra -std=c11 -D_UCRT")
    target_link_libraries(${EXE_NAME} -lucrt)
else ()
    set(CMAKE_C_FLAGS "-W -Wall -Wextra -std=c11")
endif ()

cmake 调用:

cmake -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake

和结果

$ make
[ 50%] Building C object CMakeFiles/test.dir/src/test.c.obj
[100%] Linking C executable test.exe
[100%] Built target test
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.