是否可以在 C++ 编译器模式下将标准 C++17 <filesystem> 设施与 Zig 一起使用?
Is it possible to use the standard C++17 <filesystem> facilities with Zig in C++ compiler mode?
我刚刚开始使用 Zig。我在 Windows 10 上使用 Zig 0.9.0。吸引我的功能之一是将 Zig 用作 C 或 C++ 编译器或交叉编译器。我已经成功地将 Zig 用于一些玩具程序,但是当我尝试使用 C++17 的标准库文件系统工具时,我的运气 运行 失败了。这是一个最小的例子;
#include <stdio.h>
#include <filesystem>
int main( int argc, char *argv[] )
{
std::string s("src/zigtest.cpp");
std::filesystem::path p(s);
bool exists = std::filesystem::exists(p);
printf( "File %s %s\n", s.c_str(), exists ? "exists" : "doesn't exist" );
return 0;
}
如果我尝试使用以下命令构建它;
zig c++ -std=c++17 src\zigtest.cpp
我收到以下 link 错误;
lld-link: error: undefined symbol: std::__1::__fs::filesystem::__status(std::__1::__fs::filesystem::path const&, std::__1::error_code*)
>>> referenced by ...
顺便说一句,很长一段时间我都没有走到这一步,结果我需要应用 -std=c++17 标志,直到那时我遇到了这个编译错误而不是 link 错误;
src\zigtest.cpp:7:10: error: no member named 'filesystem' in namespace 'std'
最后我会注意到(在谷歌搜索之后)我尝试传递一个 -lstdc++fs 标志,但也没有成功。在那种情况下我得到;
error(link): DLL import library for -lstdc++fs not found
error: DllImportLibraryNotFound
一些评论:您看到 std::__1::__fs::filesystem
的事实意味着您正在使用 libc++。
尝试 link 到 libstdc++fs
这是 gcc 的东西,即使你的系统上有它也不会工作。
您使用的是什么版本的 libc++?
libc++ 的文档在这里:
- https://releases.llvm.org/8.0.0/projects/libcxx/docs/UsingLibcxx.html
- https://releases.llvm.org/9.0.0/projects/libcxx/docs/UsingLibcxx.html
- https://releases.llvm.org/10.0.0/projects/libcxx/docs/UsingLibcxx.html
(等等...)
他们谈论使用 <filesystem>
以及您必须 link 做什么(如果有的话)。
应该在这个PR中解决。 Jakub 和 Spex 在我将他们链接到这个问题后立即开始处理它 :^)
我刚刚开始使用 Zig。我在 Windows 10 上使用 Zig 0.9.0。吸引我的功能之一是将 Zig 用作 C 或 C++ 编译器或交叉编译器。我已经成功地将 Zig 用于一些玩具程序,但是当我尝试使用 C++17 的标准库文件系统工具时,我的运气 运行 失败了。这是一个最小的例子;
#include <stdio.h>
#include <filesystem>
int main( int argc, char *argv[] )
{
std::string s("src/zigtest.cpp");
std::filesystem::path p(s);
bool exists = std::filesystem::exists(p);
printf( "File %s %s\n", s.c_str(), exists ? "exists" : "doesn't exist" );
return 0;
}
如果我尝试使用以下命令构建它;
zig c++ -std=c++17 src\zigtest.cpp
我收到以下 link 错误;
lld-link: error: undefined symbol: std::__1::__fs::filesystem::__status(std::__1::__fs::filesystem::path const&, std::__1::error_code*)
>>> referenced by ...
顺便说一句,很长一段时间我都没有走到这一步,结果我需要应用 -std=c++17 标志,直到那时我遇到了这个编译错误而不是 link 错误;
src\zigtest.cpp:7:10: error: no member named 'filesystem' in namespace 'std'
最后我会注意到(在谷歌搜索之后)我尝试传递一个 -lstdc++fs 标志,但也没有成功。在那种情况下我得到;
error(link): DLL import library for -lstdc++fs not found
error: DllImportLibraryNotFound
一些评论:您看到 std::__1::__fs::filesystem
的事实意味着您正在使用 libc++。
尝试 link 到 libstdc++fs
这是 gcc 的东西,即使你的系统上有它也不会工作。
您使用的是什么版本的 libc++? libc++ 的文档在这里:
- https://releases.llvm.org/8.0.0/projects/libcxx/docs/UsingLibcxx.html
- https://releases.llvm.org/9.0.0/projects/libcxx/docs/UsingLibcxx.html
- https://releases.llvm.org/10.0.0/projects/libcxx/docs/UsingLibcxx.html (等等...)
他们谈论使用 <filesystem>
以及您必须 link 做什么(如果有的话)。
应该在这个PR中解决。 Jakub 和 Spex 在我将他们链接到这个问题后立即开始处理它 :^)