gpt4 book ai didi

c - 包含来自 glibc 的 header

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:42 26 4
gpt4 key购买 nike

我在我的项目中发现了一个严重的瓶颈 - 大约四分之一的整体执行时间浪费在 tzset 函数(由 mktime 调用)中。

我检查了 tzset sources (代码,从第378行开始)发现设置一次TZ环境变量会大大减少它的执行时间,因为它读取一个时区文件(例如/usr/local/etc/zoneinfo 在我的操作系统中)如果未设置 TZ 环境变量。

我会读取这个文件并设置环境变量,但文件的位置在不同的平台上可能会有所不同。因此,我要做的是以某种方式重用 tzset 用于这些目的的代码。这看起来很简单,只需包含标题 tzset 用于定位和检索时区信息,并使用此功能:)

#include <timezone/tzfile.h>

但我真的不知道该怎么做,我的意思是使用 glibc header 。编译器不知道这个 header (我的 IDE,Clion,也看不到它)。我真的坚持这一点。

最佳答案

您需要包含 platform check对于你的 CMakeLists.txt 中的 tzinfo.h .示例:

INCLUDE (CheckIncludeFiles)
# usage: CHECK_INCLUDE_FILES (<possible header locations> <RESULT_VARIABLE> )

if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
CHECK_INCLUDE_FILES("timezone/tzfile.h;sys/tzfile.h" HAVE_TZFILE_H)
endif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")

然后您可以使用 #ifdef HAVE_TZFILE_H

如果你不担心验证文件的内容,你也可以使用 FIND_FILE 相反,哪个更快一点。 (CheckIncludeFiles 实际上使用了一个小的 .c 文件,并且 #include 是试图编译它的 header 。)

find_file (<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)

关于c - 包含来自 glibc 的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com