ctime 包含 boost::文件系统时出错
ctime Error when including boost::filesystem
我正在做小项目。必不可少的部分是,应该捕获,保存视频并将其移动到另一个文件夹。 对于视频部分,我正在使用 FFmpeg,这没有任何问题。为了安全起见,我正在使用tinyXML2。对于视频文件的复制和移动,我喜欢使用增强。 目前我正在研究Windows,并且正在使用CMake。
问题是,在我包含"boost/文件系统"的那一刻,编译器开始失败。使用谷歌并分析错误消息后,我认为标题<ctime>
或<time>
存在问题。使用<ctime>
的文件xmltest
由tinyxml2
传递。
但老实说,我非常不知道这种情况是如何以及为什么发生的。
我已经尝试切换包含的顺序,如此处所述。 我试图排除使用 ctime 的文件,但这是不可能的。 我试图解决这个问题,所以我不必使用 Boost,但由于平台的独立性,这很难。
日志文件:
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(19): error C2039: 'clock_t': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(19): error C2873: 'clock_t': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(23): error C2039: 'asctime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(23): error C2873: 'asctime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(24): error C2039: 'clock': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(24): error C2873: 'clock': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(25): error C2039: 'ctime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(25): error C2873: 'ctime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(26): error C2039: 'difftime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(26): error C2873: 'difftime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(27): error C2039: 'gmtime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(27): error C2873: 'gmtime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(28): error C2039: 'localtime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(28): error C2873: 'localtime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(29): error C2039: 'mktime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(29): error C2873: 'mktime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(30): error C2039: 'strftime': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(30): error C2873: 'strftime': symbol cannot be used in a using-declaration
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(31): error C2039: 'time': is not a member of '`global namespace''
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.21.27702includectime(31): error C2873: 'time': symbol cannot be used in a using-declaration
我包含 Boost 和 tinyxml 的方式:
find_package(TinyXML2)
find_package(Boost COMPONENTS filesystem system REQUIRED)
...
add_executable(programm ${project_sources}
${project_headers}
${TINYXML_INC})
target_link_libraries(programm PUBLIC
Boost::filesystem
Boost::system
${TinyXML2_LIBRARIES})
target_include_directories(programm PRIVATE
${Boost_INCLUDE_DIRS}
${Boost_LIBRARY_DIRS}
${TinyXML2_INCLUDE_DIR})
target_link_directories(programm PUBLIC
${Boost_INCLUDE_DIRS}
${Boost_LIBRARY_DIRS}
${TinyXML2_INCLUDE_DIR})
Util.h中的Boost包括:
#include <string>
#include <boost/filesystem.hpp>
namespace util {
bool existens_file(std::string* path);
int existens_directory(std::string* path);
bool create_directory(std::string* path);
}
使用<ctime>
的xmltest
部分:
#include "tinyxml2.h"
#include <cerrno>
#include <cstdlib>
#include <cstring>
#include <ctime>
...
XMLDocument* doc = new XMLDocument();
clock_t startTime = clock();
doc->LoadFile( argv[1] );
clock_t loadTime = clock();
int errorID = doc->ErrorID();
delete doc; doc = 0;
clock_t deleteTime = clock();
编辑经过一些测试,我尝试在不同的文件中使用<ctime>
,而无需包含 boost。在这种情况下,我也收到了与上述相同的问题。
所以我解决了这个问题,在ffmpeg-library
是名为time.h
或Time.h
的文件。 错误是意外链接了包含此文件的目录。
我不知道为什么,但包含boost::filesystem
触发了它,并使用了 ffmpeg 的时间文件。
我通过删除 ffmpeg 的链接目录解决了这个问题。
相关文章:
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- libstdc++ 文件系统中未初始化的用法?
- boost::文件系统::recursive_directory_iterator多线程安全
- C++17 文件系统::remove_all 带有通配符路径
- 实验性文件系统库不完整C++?
- 使用文件系统时仍然需要链接到带有 C++20 的 stdc++fs?
- 无法链接文件系统库C++
- 无法识别 Mac c++ 文件系统库
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- 获取 clang++:错误:在编译文件系统库的代码时
- C++17 文件系统在 Windows 10 上使用 nuwen MinGW
- C++ VS 错误:<实验/文件系统>提供 std::experimental::文件系统的标头已被Microsoft弃用,将被删除
- 如何修复 MinGW 文件系统探针?
- 将 boost::文件系统::p ath 转换为 char?
- ctime 包含 boost::文件系统时出错
- 使用 boost::文件系统时出错
- 尝试在 Cygwin 中构建 boost 文件系统时出错: 错误:在"&&"令牌之前预期为非限定 ID