<div dir="ltr"><div>A partial solution I implemented using `cmake` for a project of mine: <br></div><div><br></div><div>1. <a href="https://gitlab.com/rdbisme/mercurve/-/blob/master/cmake/ConfigureFilesystemHeader.cmake">https://gitlab.com/rdbisme/mercurve/-/blob/master/cmake/ConfigureFilesystemHeader.cmake</a> <br></div><div>2. <a href="https://gitlab.com/rdbisme/mercurve/-/blob/master/src/filesystem.h.in">https://gitlab.com/rdbisme/mercurve/-/blob/master/src/filesystem.h.in</a></div><div>3. <a href="https://gitlab.com/rdbisme/mercurve/-/blob/master/src/apps/CMakeLists.txt#L20">https://gitlab.com/rdbisme/mercurve/-/blob/master/src/apps/CMakeLists.txt#L20</a></div><div><br></div><div><br></div><div><br></div><div>That can be improved for the use case here mentioned? The check for macOS is commented in the ConfigureFilesystemHeader, but maybe it can be completed to make it work. <br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jul 3, 2022 at 8:38 PM Ken Cunningham <<a href="mailto:ken.cunningham.webuse@gmail.com">ken.cunningham.webuse@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">This is an issue that will need solving, otherwise as filesystem is used more (and it seems popular) all the systems prior to 10.15 will be left behind.<div><br></div><div>Filesystem uses features in libc++.dylib that are only present in 10.15 and newer. You are blocked from trying to use them on 10.14 and below by a blocker in the clang "__config" header, that is easy to override, but when you try to use filesystem, it will not find the libc++.dylib features and will fail.</div><div><br></div><div>You can (sometimes) use macports-libcxx to get past this. This however introduces two versions of libc++.dylib into the softare mixture, and this sometimes causes errors due to incompatibilities between libc++ versions (ODR errors). If you are taking this route, linking in the newer libc++.a statically has a higher chance of working properly (that is what Chrome does on older MacOS systems).</div><div><br></div><div>You can use gcc/libgcc, and newer versions of that have filesystem support, but that causes it's own issues.</div><div><br></div><div>There was an early version of filesystem available as <experimental/filesystem> with a linking static library on older versions of clang. I forget when that disappeared, but maybe clang-8.0. It is possible that this might be brought forward to newer clangs and made available to older systems with modest effort. This is likely the most robust approach going forward, as it is the same code (although older).</div><div><br></div><div>There are a few versions of filesystem available from other places, some header-only, that might or might not work in a general sense. These have the disadvantage of having nothing to do with clang/llvm, therefore I presume the chances of unfavourable interactions would be somewhat higher.</div><div><br></div><div>Hope this is helpful,</div><div><br></div><div>Ken</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jul 3, 2022 at 4:12 AM Mojca Miklavec <<a href="mailto:mojca@macports.org" target="_blank">mojca@macports.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I'm trying to build some sources that require <filesystem> on 10.13<br>
using clang 13 (I can try with clang 14, but I doubt that it helps).<br>
<br>
What's the correct way to compile the following minimal example? Do I<br>
need to link against a newer libc++ somehow?<br>
<br>
If it's not feasible to do that, I'll target a newer OS, I was just<br>
silently hoping to have some success ;)<br>
<br>
Thank you,<br>
    Mojca<br>
<br>
#include <cstdlib><br>
#include <filesystem><br>
<br>
int main() {<br>
    auto cwd = std::filesystem::current_path();<br>
    printf("%s", cwd.c_str());<br>
    return EXIT_SUCCESS;<br>
}<br>
<br>
> clang++-mp-13 test.cpp -o test<br>
test.cpp:5:16: error: no member named 'filesystem' in namespace 'std';<br>
did you mean 'std::__fs::filesystem'?<br>
    auto cwd = std::filesystem::current_path();<br>
               ^~~~~~~~~~~~~~~<br>
               std::__fs::filesystem<br>
/opt/local/libexec/llvm-13/bin/../include/c++/v1/filesystem:268:1:<br>
note: 'std::__fs::filesystem' declared here<br>
_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM<br>
^<br>
/opt/local/libexec/llvm-13/bin/../include/c++/v1/__config:816:58:<br>
note: expanded from macro '_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM'<br>
  _LIBCPP_BEGIN_NAMESPACE_STD namespace __fs { namespace filesystem {<br>
                                                         ^<br>
1 error generated.<br>
<br>
> clang++-mp-13 -std=c++17 test.cpp -o test<br>
Undefined symbols for architecture x86_64:<br>
  "std::__1::__fs::filesystem::__current_path(std::__1::error_code*)",<br>
referenced from:<br>
      std::__1::__fs::filesystem::current_path() in test-1b2bbf.o<br>
ld: symbol(s) not found for architecture x86_64<br>
clang: error: linker command failed with exit code 1 (use -v to see invocation)<br>
</blockquote></div>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><span style="font-family:monospace">                ..<br>               /**\<br>              /****\     <br>             /\****/\<br>            /  \**/  \<br>           /    \/    \<br>          /     /\    /\<br>         / \   /  \  /  \<br>        /   \ /    \/    \<br>        \    /\    /\    /<br>         \  /  \  /  \  /<br>          \/    \/    \/<br>                /\ <br>               / +\<br>               \+ /<br>                \/<br>              <a href="http://rdb.is" target="_blank">rdb.is</a><br>       Book a meeting with me:<br>     <a href="https://calendly.com/rdbisme" target="_blank">https://calendly.com/rdbisme</a><br><br><br></span></div></div>