我尝试在gcc 6.0中使用新的c ++ 1z功能实际开发.
如果我尝试这个小例子:
#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
fs::path p1 = "/home/pete/checkit";
std::cout << "p1 = " << p1 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我有:
/opt/linux-gnu_6-20151011/bin/g++ --std=c++1z main.cpp -O2 -g -o go /tmp/ccaGzqFO.o: In function \`std::experimental::filesystem::v1::__cxx11::path::path(char const (&) [36])': /opt/linux-gnu_6-20151011/include/c++/6.0.0/experimental/bits/fs_path.h:167: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()' collect2: error: ld returned 1 exit status
gcc版本是快照linux-gnu_6-20151011
任何提示如何链接新的c ++ 1z功能?
我需要使用(实验性)C++17文件系统库编写程序,但clang在我的Mac(macOS 10.12.03)上似乎没有包含文件系统头.
由于我需要使用C++17,我不能使用像Boost库这样的替代品.
当我尝试编译一个只包含文件系统和iostream(并写入cout)的示例程序时
#include <filesystem>
#include <iostream>
using namespace std;
int main(){
cout << "test" << endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
>clang test.cpp -std=c++1z
test.cpp:2:10: fatal error: 'filesystem' file not found
#include <filesystem>
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
当我尝试使用GCC 6.3(通过自制软件安装)时,我得到:
>gcc-6 test.cpp -std=c++17
test.cpp:2:22: fatal error: filesystem: No such file or directory
#include <filesystem>
^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
我也试过使用实验/文件系统而不是编译使用gcc但似乎尝试编译为iOS导致另一个错误,这似乎与iostream
Undefined symbols for architecture x86_64:
"std::ios_base::Init::Init()", referenced …Run Code Online (Sandbox Code Playgroud) 我正在编写一个C++应用程序,需要至少在Ubuntu 15,FreeBSD 11,MacOS X和Windows 7(使用GCC,clang和MSVC编译)之间移植.所有这些系统都具有至少具有修改日期/时间的文件的概念.
问题是:有没有办法使用可以在所有这些系统上运行的单个C++代码来设置文件修改时间?
注意:通过设置文件修改时间,我的意思是将其设置为任何指定值,而不是当前时间(即不是触摸功能).