I just wanna to print the current path and its content, via std::filesystem::path::current_path
(the compiler is emcc
this one). Some code below:
//... some stuff ... namespace fs = #if defined(_MSC_VER) || defined(_WIN32) std::filesystem; #else std::__fs::filesystem; #endif //... some stuff ... cfg::Config::Config() { this->Path = fs::current_path(); } void cfg::Config::getPath() { for (auto &p : fs::directory_iterator(this->Path)) std::cout << p.path() << 'n'; }
And for windows it works fine, the output looks like:
... "D:\GitHub\Emscripten_OpenGL\build\cmake_install.cmake" "D:\GitHub\Emscripten_OpenGL\build\Debug" "D:\GitHub\Emscripten_OpenGL\build\Emscripten_Graphics.dir" "D:\GitHub\Emscripten_OpenGL\build\Emscripten_Graphics.sln" "D:\GitHub\Emscripten_OpenGL\build\Emscripten_Graphics.vcxproj" "D:\GitHub\Emscripten_OpenGL\build\Emscripten_Graphics.vcxproj.filters" "D:\GitHub\Emscripten_OpenGL\build\Emscripten_Graphics.vcxproj.user" ...
However, whether for Linux subsystem or for docker container with Ubuntu image it just prints the root directory:
application_1 | [100%] Built target Emscripten_Graphics application_1 | make: make application_1 | "/tmp" application_1 | "/home" application_1 | "/dev" application_1 | "/proc"
May be I something missed apropos the Linux’s std::filesystem
?
Advertisement
Answer
I found a solution, so it’s may be useful to others. Thanks to @Sugar I dug in the Emscripten Filesystem API. The emscripten creates its own virtual filesystem and uploading there files used in c++ code. According to this issue the way to fix it is to add the -s NODERAWFS=1
as flag, whilst compile.